我有两个列表,我想遍历元素对,等等。没有这种转变,我只能用它来有效地做到这一点。AB(A[0], B[2])(A[1], B[3])zip(A, B)在这个例子中,位移是2,但可能会发生我需要N的移位的情况。如何有效地做到这一点(而不是索引成两个列表)?
2 回答
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
最终,我得到了以下通用函数:
def zip_shift(s1, s2, shift, placeholder):
i1 = iter(s1)
i2 = iter(s2)
while shift > 0:
yield placeholder, next(i2) # leave only next(i2) if no placeholder pairs are needed
shift -= 1
yield from zip(i1, i2) # or return zip
上述函数的工作方式类似于生成器,它首先填充值时间,而不是从第二个序列中获取值。之后,它就像.这是一个相对较新的结构(自Python 3.3以来)。上述收益率和回报率之间存在细微差异,但在这种情况下可以忽略不计。placeholdershifts2zipyield from
当然,如果值几乎为1(带有占位符的对除外),则可以通过以下方式实现相同的值:shift
zip(s1, next(s2))
与序列一样,不必具有相同的长度。只要较短的序列未耗尽,生成器就会工作。zip
添加回答
举报
0/150
提交
取消