Python的for循环操作很抽象。
迭代与按下标访问数组最大的不同是,后者是一种具体的迭代实现方式,而前者只关心迭代结果,根本不关心迭代内部是如何实现的。
1. 迭代List
对于有序集合,元素确实是有索引的。如果我们想知道元素的下标,可以使用enumarate()函数。
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>> for index, name in enumerate(L): ... print index, '-', name ... 0 - Adam 1 - Lisa 2 - Bart 3 - Paul
这里实际上是enumarate()函数把List变成了类似下面这样,由tuple组成的List:
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
可见,索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。
2. 迭代dict
对于dict,我们可以使用for遍历,dict中的key,如果想迭代dict中的value,可以使用dict的方法values(),这个方法的返回值是一个只存有dict value的List:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } print d.values() # [85, 95, 59] for v in d.values(): print v # 85 # 95 # 59
itervalues()方法也可以代替values()方法,区别在于values()会重新生成一个List,而itervalues()不会,它会直接抽取dict中的value,更省空间。
我们也可以使用items()这个方法来同时迭代dict中的value和key:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> print d.items() [('Lisa', 85), ('Adam', 95), ('Bart', 59)]
可以看出来,items()的返回值是由tuple组成的List。