python之迭代
在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。
在Python当中的迭代是很抽象的,它与java不同,它是通过for..in来实现的:
for (i=0; i<list.length; i++) { n = list[i]; }
这个是java代码。
>>> for i in range(1,101): if i % 7 ==0: print (i) 7 14 21 28 35 42 49 56 63 70 77 84 91 98
这个是python当中的迭代。
可见在Python的迭代当中省略了很多的东西。
因为 Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。
因此,迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。
我们现在已经知道的集合有:
有序的:list,tuple,str和unicode
无序的是:set
无序集合并且有key-value对:Dict
Python中,迭代永远是取出元素本身,而非元素的索引。
对于有序的集合我们有的时候确实会出现想要迭代出索引好的情况,这个时候便需要一个特殊的函数来解决问题了。
这个函数就是enumerate()函数:
>>> L = ['Adam','Paul','Lisa','Dean'] >>> for index, name in enumerate(L): print (index,":",name) 0 : Adam 1 : Paul 2 : Lisa 3 : Dean
这里的迭代索引号并非是真的迭代索引号,而是函数把L变成一个tuple来进行迭代。
也就是把:
['Adam','Paul','Lisa','Dean']
变成了类似于:
([0,'Adam'],[1,'Paul'],[2,'Lisa'],[3,'Dean'])
因此我们迭代的每一个元素其实是一个tuple
只是这样写就简化了写法。
我们知道迭代是一种for的循环,但是在dict当中呢我们拥有key-value这样的对。我们在迭代value的时候就需要用到key。
不过我们的python提供了一个value的方法:来简化这种方式:
>>> d = {'Dean':95,'Sam':97} >>> print (d.values()) dict_values([97, 95]) >>> for l in d.values(): print (l) 97 95
其实我们从上面的输出结果可以看到我们的values函数其实是把我们的dict变成了list来进行索引的。(这个是2.0的说法,在3.0的版本当中已经不是list了,而是view,包括keys(),items()函数都不是list,而是view)
在python的函数使用手册上面还拥有一种itervalues()的方法(这个是2.0的手册,在3.0的版本当中呢已经不存在itervalue()这个函数了,包括iterkeys()等都被删除了)
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
在python当中,如果我们需要同时迭代key和value我们需要用到items()函数。
>>> d = {'Dean':95,'Sam':97} >>> for key,value in d.items(): print (key,':',value) Sam : 97 Dean : 95