首页 > 解决方案 > Python 3.8:迭代第一个和第二个元素,然后是第二个和第三个,依此类推

问题描述

我想通过创建一个范围来将列表中的某些数字与另一个列表中的值进行比较。像这样:

r = np.arange(0, 20, 2)

现在,r 是一个如下所示的数组:

array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

现在,我想使用从 r 的前两个元素开始的 for 循环,并创建一个范围,以便在第一次迭代时考虑第一个和第二个元素,然后对于第二次迭代,第二个和第三个元素是经过考虑的。

所以每次迭代看起来像这样:

range(0,2)
range(2,4)
range(4,6)
range(6,8)

等等。

有没有这样循环的功能?

我不想迭代不重叠的块,即

range(0,2)
range(4,6) # This is not what I want
range(6,8)

等等。

标签: python-3.xfor-loopiterationrange

解决方案


更新:从 Python 3.10 开始,这个功能是内置的。使用itertools.pairwise().

itertools在底部有一个很好的配方,叫做“pairwise”:

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 x, y in pairwise([1,2,3,4]):
     print(x, y)

1 2
2 3
3 4

推荐阅读