什么是迭代
在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历称为迭代(Iteration)。
Python中的for循环不仅可以用在list或tuple上,还可以作用在其他任何迭代对象上。
迭代索引
Python中,迭代永远是取出元素的本身,而非元素的索引。
对于有序集合,元素是有索引的,可通过enumerate()函数拿到索引。
enumerate()函数:
>>> L=['Ada','Lisa','Ben','Paul']
>>> for index,name in enumerate(L):
print (index,'-',name)
0 - Ada
1 - Lisa
2 - Ben
3 - Paul
使用enumerate()函数,我们可以在for循环中同时绑定索引index和name。实际上,enumerate()函数是把:
['Ada','Lisa','Ben','Paul']
变成了元组(tuple):
[(0,'Ada'),(1,'Lisa'),(2,'Ben'),(3,'Paul')]
zip()函数可以把两个list变成一个list:
在迭代['Ada','Lisa','Ben','Paul']时,如果想打印出名次-名字(名次从1开始),考虑使用zip()函数和range()函数
G_list=[1,2,3,4]
N_list=['Ada','Lisa','Ben','Paul']
for g,name in zip (G_list,N_list):
print(g,'-',name)
输出结果:
1 - Ada
2 - Lisa
3 - Ben
4 - Paul
迭代dict的value
dict对象有一个values()方法,这个方法把dict转换成一个包含value的list,这样我们迭代的就是每一个value:
d={'Adam':95,'Lisa':85,'Ben':75}
print(d.values())
dict_values([95, 85, 75])
for v in d.values():
print(v)
95
85
75
在python2中,除了values方法外,还有一个itervalues()方法(python3没有),用itervalues()方法替代values()方法,迭代效果完全一样:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.itervalues()
# <dictionary-valueiterator object at 0x106adbb50>
for v in d.itervalues():
print v
# 85
# 95
# 59
那这两个方法有何不同之处呢?
1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
3. 打印 itervalues() 发现它返回一个 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
任务
给定一个dict:
d = { ‘Adam’: 95, ‘Lisa’: 85, ‘Bart’: 59, ‘Paul’: 74 }
请计算所有同学的平均分。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
sum = 0.0
i = 0
for s in d.values():
sum += s
i += 1
print (sum/i)
78.25
迭代dict的key和value
在一个for循环中,可以同时迭代key和value。
首先,我们看看dict对象的items()方法返回的值:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
print(d.items())
dict_items([('Adam', 95), ('Lisa', 85), ('Bart', 59), ('Paul', 74)])
可以发现,items()方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:
for key,value in d.items():
print(key,':',value)
运行结果:
Adam : 95
Lisa : 85
Bart : 59
Paul : 74
任务
d = { ‘Adam’: 95, ‘Lisa’: 85, ‘Bart’: 59, ‘Paul’: 74 }
打印出name:score , 最后再打印出平均分average:score。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
sum = 0.0
i=0
for k,v in d.items():
sum += v
i += 1
print(k,':',v)
print ("anverage",':',sum/i)
运行结果:
Adam : 95
Lisa : 85
Bart : 59
Paul : 74
anverage : 78.25