如何成对迭代列表?

时间:2016-07-31 22:40:34

标签: python iteration itertools

我想逐个迭代python中的列表。 E.g。

l = [1, 2, 3, 4, 5, 6, 7, 8]
for a, b in magic_function_I_always_wanted(l)
    print(a, b)

>>> 1 2
>>> 2 3
>>> 3 4
>>> 4 5
>>> etc...

我知道你可以在python以及几乎所有语言中这样做,我只想要一个并不可怕的版本。

我对所有语言都很好奇,但我个人最关心的是python。如果有一种方法可以在python中很好地完成这项工作(我没有想到哪些使用了大量izip或其他同样古怪的东西),请回答!

编辑:

这是发布的问题的不重复,因为该问题要求l - > (l0,l1),(l2,l3)等...这很容易。我要求l - > (l0,l1),(l1,l2)等......

1 个答案:

答案 0 :(得分:1)

您可以使用移位版本zip列表,然后循环播放它们:

for o, e in zip(l, l[1:]):
    print(o, e)
#(1, 2)
#(2, 3)
#(3, 4)
#(4, 5)
#(5, 6)
#(6, 7)
#(7, 8)

不确定这是否更优雅或更高效,看起来像创建像deque这样的容器是一个选项:

from collections import deque
n = 3
tmp = deque(l[:(n-1)])
for e in l[(n-1):]:    
    tmp.append(e) 
    print(list(tmp))
    tmp.popleft()
#[1, 2, 3]
#[2, 3, 4]
#[3, 4, 5]
#[4, 5, 6]
#[5, 6, 7]
#[6, 7, 8]