python-3.x - 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.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
推荐阅读
- reactjs - 在函数助手中调用 redux 操作
- javascript - 我的列表的下一个和上一个按钮不起作用
- amazon-web-services - AWS Cognito 和自定义角色
- c++ - 如何在 c++ builder 中动态声明 c# dll 函数
- node.js - Sequelize 和在关联中指定外键的问题
- jquery - toggleClass:删除当前类并添加一个新类
- postman - 邮递员:如何存储响应中的数组并使用它来发出多个请求
- python - 有没有办法在同一个 conda 环境中安装 python 3 和 python 2?
- data-structures - 非结构化数据方法和解决方案
- python - 如何让pocketsphinx识别关键词