如何压缩两个序列(一个由N个元素移位)?

我有两个列表,我想遍历元素对,等等。没有这种转变,我只能用它来有效地做到这一点。AB(A[0], B[2])(A[1], B[3])zip(A, B)

在这个例子中,位移是2,但可能会发生我需要N的移位的情况。如何有效地做到这一点(而不是索引成两个列表)?


函数式编程
浏览 73回答 2
2回答

绝地无双

我认为一个简洁的方法是这样做zipped = zip(list1, list2[n:])where 是表示偏移量的整数。n

慕尼黑的夜晚无繁华

最终,我得到了以下通用函数: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(带有占位符的对除外),则可以通过以下方式实现相同的值:shiftzip(s1, next(s2))与序列一样,不必具有相同的长度。只要较短的序列未耗尽,生成器就会工作。zip
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python