python之迭代

在Python中,如果给定一个listtuple,我们可以通过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

 

 



posted @ 2016-09-03 16:12  旷野足迹  阅读(4850)  评论(0编辑  收藏  举报