1.迭代
对一个集合,无论有无序,还可以依次取出集合的每一个元素
集合 | 类型 |
---|---|
有序 | list、stuple、str、unicode |
无序 | set |
无序并且具有key-value | dict |
迭代在python中,可以说就是for循环,
但是迭代又与一般的下标访问数组不同,前者只关心迭代结果,不关心内部的实现
2.索引迭代
可取得索引,用到enumerate()函数,按照自己定义索引输出,也可以用zip()函数
#enumerate()函数,可以把['a','b','c']变成[(0,'a'),(1,'b'),(2,'c')]
#可以发现,enumerate()函数把1个元素变成了2个元素,所以需要两个索引接收,例:
for index,name in enumerate(L)
print index,'-',name
#zip()函数,可以把2个list变为1个list,例:
print zip([1,2,3],['a','b','c'])
#打印返回 [(1,'a'),(2,'b'),(3,'c')]
#例:
#从0开始索引,用enumerate():
for index,name in enumerate(L):
print index,'-',name
#从1开始索引,用zip():
for index,name in zip(range(1,len(L)+1),L):
print index,'-',name
3.迭代dict和value
#方法一:
#使用dict.values(),可以把dict转换为一个包含所有value的list
#例:
d={'a':1,'b':2,'c':3}
for v in dict.values():
print v
#方法二:
#使用itervalues(),效果与values相同
#例:
for v in dict.itervalues():
print v
!上述两种方法有什么不同?
1.values() 方法实际上把一个 dict 转换成了包含 value 的list。
2. 但是itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,
所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
3. 打印itervalues() 发现它返回一个 < dictionary-valueiterator > 对象,
因为在Python中,for 循环可作用的迭代对象远不止list,tuple,str,unicode,dict等,
任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
4.迭代dict的key和values
#方法一:
#使用items(),返回一个list,包含tuple的list
#方法二:
#使用iteritems(),不用转换为list,直接迭代给出tuple
#例:
d={'a':1,'b':2,'c':3}
sum=0.0
for key,value in d.iteritems():
sum=sum+value
print key,'-',value
print sum