我正在努力写这样的东西:
list(reversed(list(el.iterancestors()))) + [1,2,3]
生成器很糟糕,因为我被迫将它们消耗到列表中。
有没有办法简化这个?我认为reversed()
应该接受迭代器,我错了吗?
生成器不保证有最后一个项目,因此无法逆转。下面的输出会是什么?
from itertools import cycle
reversed(cycle('abc'))
还存在不小心吃掉所有记忆的风险:
from itertools import permutations
reversed(permutations('abcdefghijklmnopqrstuvwxyz', 10)) # 19,275,223,968,000 tuples
请注意,这一点reversed()
是记忆效率高。对于序列,因此具有索引的对象(列表、字符串、元组、范围),reversed()
生成一个使用内部索引的迭代器,该索引从len(inputobject) - 1
,并且进展到0
当你迭代时。它永远不必以这种方式创建输入序列的副本,但该技巧只能对已经具有长度并支持随机访问的内容起作用。
For 你的情况我不会用reversed()
anyway。您想要一个列表作为输出,而不是生成器,因此请使用切片来反转列表:
list(el.iterancestors())[::-1] + [1, 2, 3]
内存效率在这里不是问题,因为您正在构建一个新的列表对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)