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,因此我认为在反转情况下,唯一的解决方案是使用列表,或者可能同时使用列表。
itertools.islice
可以解决问题,但事实证明该参数只接受正值。这是一个有趣的问题。 - Daniel DiPaolo>>> reversed((x for x in range(5)))
TypeError: argument to reversed() must be a sequence
- Josh Lee