gpt4 book ai didi

python - 如何反转 itertools.chain 对象?

转载 作者:太空狗 更新时间:2023-10-29 19:33:54 26 4
gpt4 key购买 nike

我的函数创建了一个生成器链:

def bar(num):
import itertools
some_sequence = (x*1.5 for x in range(num))
some_other_sequence = (x*2.6 for x in range(num))
chained = itertools.chain(some_sequence, some_other_sequence)
return chained

我的函数有时需要以相反的顺序返回 chained。从概念上讲,以下是我希望能够执行的操作:

if num < 0:
return reversed(chained)
return chained

不幸的是:

>>> reversed(chained)
TypeError: argument to reversed() must be a sequence

我有哪些选择?

这是一些实时图形渲染代码,所以我不想让它太复杂/太慢。

编辑:当我第一次提出这个问题时,我没有考虑过发电机的可逆性。正如许多人指出的那样,生成器无法逆转。

我确实想反转链的扁平化内容;不仅仅是生成器的顺序。

根据响应,我无法使用单个调用来反转 itertools.chain,因此我认为这里唯一的解决方案是使用列表,至少对于反转情况,或许对于两者都是如此。

最佳答案

if num < 0:
lst = list(chained)
lst.reverse()
return lst
else:
return chained

reversed() 需要一个实际的序列,因为它通过索引向后迭代它,这不适用于生成器(它只有“下一个”项目的概念)。

由于无论如何都需要展开整个生成器以进行反转,因此最有效的方法是将其读入列表并使用 .reverse() 方法就地反转列表。

关于python - 如何反转 itertools.chain 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5008921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com