>>> i = 0
>>> seq = ['one', 'two', 'three']
>>> for element in seq:
... seq[i] = '%d: %s' % (i, seq[i])
... i += 1
...
>>> seq
['0: one', '1: two', '2: three']
>>> seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
... seq[i] = '%d: %s' % (i, seq[i])
...
>>> seq
['0: one', '1: two', '2: three']
>>> def _treatment(pos, element):
... return '%d: %s' %(pos, element)
...
>>> seq = ['one', 'two', 'three']
>>> [_treatment(i, e1) for i, e1 in enumerate(seq)]
['0: one', '1: two', '2: three']
最后一种方式更容易矢量化,因为它共享了基于序列中单个项目的小函数。
每当要对序列中的内容进行循环处理时,就应该尝试用List comprehensions来代替它。