迭代就是依次遍历。比如你要依次遍历一个列表中的所有元素,你可以:
L = [0, 1, 2, 3, 4, 5]
for i in L:
print(i, )
这样你可以依次打印出列表中的所有元素(或者进行其他操作),这就是迭代。
如果你以前学过Java或者C语言,可能会对Python的这种迭代方式感到不习惯。Java中典型的迭代方式是:
int [] numbers = {0, 1, 2, 3, 4, 5};
for(int i = 0;i < numbers.length; i++ ){
System.out.println(numbers[i]);
}
我们已经习惯了用这种方式去遍历数组或者其他可以便利的东西,对于Python这种另类的for循环反而有点不适应。但其实很多语言中都有一种叫做foreach的语法,比如Java里的foreach:
int [] numbers = {0, 1, 2, 3, 4, 5};
for (int i : numbers){
System.out.println(i);
}
Python里的for循环更像是Java里的foreach,它把列表中的每一个元素依次放进一个迭代变量中,你可以很方便的直接对这个迭代变量进行处理,而不是把这个迭代标量当成一个索引,然后通过索引再取得列表中对应的元素。
这样做的好处还有一点:有的可迭代的对象是没有索引的,比如字典和集合。在Python中你可以使用for轻易地遍历一个字典:
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
print(key)
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。
for可以遍历所有可迭代的对象,还比如字符串。那么怎么才能判断一个对象是否是可迭代的呢?方法是通过collections模块的Iterable类型判断:
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False
最后一点,在Python中有一个函数叫做enumerate(),它可以把list变成键值对:
>>> for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
0 A
1 B
2 C
在Python中同时引用两个变量很常见,比如
>>> for x, y in [(1, 1), (2, 4), (3, 9)]:
print(x, y)
1 1
2 4
3 9