【问题标题】:Python 3.8: Iterate over 1st and 2nd element, then 2nd and 3rd and so on [duplicate]Python 3.8:迭代第一个和第二个元素,然后是第二个和第三个,依此类推[重复]
【发布时间】:2021-03-15 15:06:46
【问题描述】:

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

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)

等等。

【问题讨论】:

  • @mkrieger1 不完全是,这个问题是关于将列表拆分成不重叠的块,而这里的提问者想要 [0, 2]、[2, 4]、[4, 6] 等。
  • 你想要范围还是数组?这似乎是一个 XY 问题。您打算如何处理结果?
  • @MadPhysicist 我有第二个数字列表,我想检查第二个列表中的每个数字,如果它在每个范围内。然后打印每个范围内有多少个数字。
  • 请不要关闭问题。我不想以块的形式迭代数组。就像@nekomatic 解释的那样。
  • 反正其他需求还是有很多答案的:比如stackoverflow.com/questions/5434891/…

标签: python-3.x for-loop iteration range


【解决方案1】:

更新:从 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

【讨论】:

  • 这将如何与 for 循环一起工作?
  • @VaradKulkarni for x, y in pairwise(...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 2021-04-03
相关资源
最近更新 更多