是否可以在 Python 中以下面的方式迭代列表(将此代码视为伪代码) ?
a = [5, 7, 11, 4, 5] for v, w in a: print [v, w]
它应该生产
[5, 7] [7, 11] [11, 4] [4, 5]
几乎一字不差地来自 在 Python 中以列表(循环方式)迭代对:
def pairs(seq): i = iter(seq) prev = next(i) for item in i: yield prev, item prev = item
来自 itertools食谱:
itertools
from itertools import tee def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = tee(iterable) next(b, None) return zip(a, b) for v, w in pairwise(a): ...
要做到这一点,你应该这样做:
a = [5, 7, 11, 4, 5] for i in range(len(a)-1): print [a[i], a[i+1]]
>>> a = [5, 7, 11, 4, 5] >>> for n,k in enumerate(a[:-1]): ... print a[n],a[n+1] ... 5 7 7 11 11 4 4 5
可以使用 zip列表本身不包含第一个元素:
zip
a = [5, 7, 11, 4, 5] for previous, current in zip(a, a[1:]): print(previous, current)
即使列表中没有元素或只有1个元素(在这种情况下,zip返回一个空的迭代器,而且 for循环中的代码永远不会执行) ,这种方法也可以工作。它不工作的 发电机,只有 序列(tuple,list,str等)。
for
tuple
list
str