Python开发学习笔记(10) - 迭代

迭代

  在Python中,如果给定一个list或tuple,可以通过for循环来遍历这个list或tuple, 这种遍历称为迭代。
  Python中,迭代是通过 for … in 来完成的。
  Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。

# 用for循环迭代数列 1-100 并打印出7的倍数
for i in range(1,101)[6::7]:
    print i
索引迭代 enumerate() 函数 

  Python中,迭代永远是取出元素本身,而非元素的索引
  对于有序集合,如果想用for循环拿出索引, 可以使用 enumerate() 函数

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
...     print index, '-', name
... 
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
  • 使用 enumerate() 函数,可以在for循环中同时绑定索引index和元素name,实际上,enumerate() 函数把

    [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]

    变成了一个类似:

    [(0, ‘Adam’), (1, ‘Lisa’), (2, ‘Bart’), (3, ‘Paul’)]

因此,迭代的每一个元素实际上是一个tuple

for t in enumerate(L):
    index = t[0]
    name = t[1]
    print index, '-', name

如果我们知道每个tuple元素都包含两个元素,for循环又可以进一步简写为:

for index, name in enumerate(L):
    print index, '-', name

因此,索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。

zip()函数可以把两个 list 变成一个 list:

>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]
迭代dict的value

通过普通的迭代方法 for … in, 每次循环可以拿到dict的一个key。

values()
如果需要迭代dict 对象的value,dict对象有一个values()方法可以做到, 这个方法吧dict转换成一个包含所有value的list, 这样迭代的就是dict的每一个value:

d = {'chris':95,'john':85}
print d.values()
# [85,95]
for v in d.values():
   print v
# 85
# 95

itervalues()
dict对象中的itervalues()方法与values()对于迭代dict中的value,效果是一样的:

d = {'chris':95,'john':85}
print d.itervalues()
# <dictionary-valueiterator object at 0x106adbb50>
for v in d.itervalues():
    print v
# 85
# 95  
练习:计算一个班所有同学的平均分
d = { 'Adam': 95, 'Chris': 85, 'Bart': 59, 'Paul': 74 }

sum = 0.0
for  score in d.itervalues():
    sum += score
print sum/len(d)

# 78.25

values()与itervalues()的不同之处:

  1. values()方法实际上是把一个dict转换成一个只包含dict中value的list。
  2. itervalues()方法不会转换,它会在迭代的过程中依次从dict中取出value,所以itervalues()方法比values()方法节省了生成list所需的内存。
  3. 打印itervalues() 返回的是一个 <dictionary-valueiterato> 对象,说明在Python中,for循环可作用的迭代对象远不止list, tuple, str, unicode, dict等,任何可迭代对象都可以作用于for 循环,而内部如何迭代通常并不用关心。

    如果一个对象说自己可迭代,那就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。

同时迭代dict的key,value

items()
在一个for循环中,同时迭代dict的key,value, 可以利用dict对象的 items()方法。
items()方法把dict对象转换成一个包含tuple的list:

# items()的返回值
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> print d.items()
[('Lisa', 85), ('Adam', 95), ('Bart', 59)]

如果对这个list进行迭代,就可以同时获得key和value:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
for key, value in d.items():
    print key, ':', value

# Lisa : 85
# Adam : 95
# Bart : 59

iteritems()
items()也有一个对应的iteritems(), iteritems()不把dict转换成list,而是在迭代过程中不断的给出tuple,所以,iteritems()不占用额外的内存。

练习: 用name:score 打印出全部人的成绩,最后打印出平均分

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }

sum = 0.0
for k, v in d.iteritems():
    sum = sum + v
    print k,':',v
print 'average', ':', sum/len(d)

# Lisa : 85
# Paul : 74
# Adam : 95
# Bart : 59
# average : 78.25
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值