繁体   English   中英

为什么reversed()不接受生成器?

[英]Why doesn't reversed() accept a generator?

我正在努力写这样的事情:

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 它永远不必以这种方式创建输入序列的副本,但是该技巧只能在已经具有一定长度并支持随机访问的对象上起作用。

对于你的情况我没有使用reversed() 反正 您希望将列表作为输出而不是生成器,因此请使用切片来反转列表:

list(el.iterancestors())[::-1] + [1, 2, 3]

在这里,内存效率不是问题,因为您正在构建新的列表对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM