什么是迭代(Iteration)
在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。
l=[1,2,3,4,5]
for i in l:
print ( i )
以上这种遍历就叫做迭代,但是Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上,因此,迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。
注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括:
1. 有序集合:list,tuple,str,unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict
索引迭代
Python中,迭代永远是取出元素本身,而非元素的索引。而在有序集合,元素是有索引的,如果我们想用for循环取出索引,就要用到 enumerate() 函数
l=['python','java','c++']
for index,name in enumerate(l):
print( index,' ', name)
输出结果:0 python
1 java
2 c++
可见enumerate函数输出了元素的索引和元素本身,使用for循环将index 与name绑定,但是,这不是 enumerate() 的特殊语法。实际上,enumerate() 函数把['python','java','c++']
变成了[(0,'python'),(1,'java'),(2,'c++')]
所以迭代的每一个元素其实是一个tuple,代码段应该是:
for i in enumerate(l):
index=i[0]
name =i[1]
print( index,' ', name)
当每个tuple都有两个元素时,我们的代码就可以简写成第一种形式。
所以索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。
迭代dict
迭代dict的value
想要直接迭代的dict的value,可以使用values()方法,
f={'father':'Bob','mother':'Marry','son':'Jim'}
for i in f.values():
print (i)
运行结果:Jim
Bob
Marry
还有一种itervalues()可以代替vlaues()方法,达到相同的目的
f={'father':'Bob','mother':'Marry','son':'Jim'}
for i in f.itervalues():
print (i)
以上这种方法也可以达到效果。
values()与itervalues()的区别如下:
1. values() 方法实际上把一个 dict 转换成了包含 value 的list。 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
2. 打印 itervalues() 发现它返回一个 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
迭代dict的key和value
迭代dict中的key和value时要用的items()方法
f={'father':'Bob','mother':'Marry','son':'Jim'}
for i in f.items():
print (i)
运行结果:('son', 'Jim')
('father', 'Bob')
('mother', 'Marry')
在Python中,items()将dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value。
这就是迭代。
Ps:累死了。。昨天就忘记更新了〒_〒。。。明天继续,fighting!