微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Python 中多次反转迭代器

如何解决在 Python 中多次反转迭代器

我尝试使用 reversed 函数多次反转同一个迭代器。例如,使用代码

iterator = range(3)
N = 5
k = 0
out = []
while k < N:
    for i in iterator:
        out.append(i)
    iterator = reversed(iterator)
    k += 1
print(out)

我想要/期望有输出

[0,1,2,... ]

但是,在第一次使用 reverse 之后,我得到了错误

TypeError: 'range_iterator' object is not reversible

什么是不需要解包迭代器的有效解决方法

解决方法

您可以简单地交替使用原始迭代器和反向迭代器。 你可以从这个简单的例子开始:

iterator = range(3)
N = 5
k = 0
out = []
while k < N:
    if k%2 == 0:
        it = iterator
    else:
        it = reversed(iterator)
    for i in it:
        out.append(i)
    k += 1
print(out)

[0,1,2,2]
,

谢谢大家的回复。我事先知道我可以使用包含原始版本和反向版本的列表,然后选择我需要的一个,但我真的很想看看是否有一些对我来说看起来很自然的东西,例如 reversed(reversed(whatever)) .所以,让它更紧凑一点,并添加一个布尔值 do_reverse(我在我的实际项目中需要它)我会用这样的东西:

iterator = range(3)
do_reverse = True
N = 5
k = 0
out = []
while k < N:
    for i in [iterator,reversed(iterator)][k % 2 * do_reverse]:
        out.append(i)
    k += 1
print(out)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。