为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

函数式编程 2022-08-16 16:22:40
我有两个列表,我想遍历元素对,等等。没有这种转变,我只能用它来有效地做到这一点。AB(A[0], B[2])(A[1], B[3])zip(A, B)在这个例子中,位移是2,但可能会发生我需要N的移位的情况。如何有效地做到这一点(而不是索引成两个列表)?
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

我认为一个简洁的方法是这样做

zipped = zip(list1, list2[n:])

where 是表示偏移量的整数。n


查看完整回答
反对 回复 2022-08-16
?
慕尼黑的夜晚无繁华

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


查看完整回答
反对 回复 2022-08-16
  • 2 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信