gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:26 25 4
gpt4 key购买 nike

我正在努力写这样的东西:

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]

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

关于python - 为什么 reversed() 不接受生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43511836/

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