【问题标题】:How to get elements from a generator in inverse order? [duplicate]如何以相反的顺序从生成器中获取元素? [复制]
【发布时间】:2019-12-16 18:23:16
【问题描述】:

我想从生成器中以相反的顺序获取元素,就像从列表中一样。

是否存在像 [::-1] 这样的方法来实现这一目标?比如:

for x in map(int,['1','2','3'])[::-1]:
    print(x)

预期结果是:

3,2,1

【问题讨论】:

  • 为什么不事先反转['1','2','3']
  • 因为['1','2','3']是其他进程生成的,不是直接提供的。
  • 正如chis所说的['1','2','3'].reverse()
  • 生成器不能反转。见:stackoverflow.com/questions/43511836/…
  • @Todd 它是如何从其他进程传递过来的?是排队吗?

标签: python generator reverse


【解决方案1】:

只需先将其转换回列表即可。你不能用发电机去另一个方向:

for x in list(map(int,['1','2','3']))[::-1]:
    print(x)

【讨论】:

  • +1,虽然它可能值得注意的是这打败了生成器的惰性评估,并且无限生成器存在一些危险(以及切片符号在生成器上不起作用(所以他的想法不会起作用.. .) ... itertools.islice 有点...但不是用于反转...但可能有一个 itertools 的东西也可以反转:/
  • 如果['1','2','3']占用大量内存,无法提前转成list
  • 我认为如果没有内存中的整个序列,您将无法做到这一点......(另请参阅:stackoverflow.com/questions/5008921/…
  • @JoranBeasley 反向遍历无限生成器意味着什么?
  • 基本上是while 1: pass;
猜你喜欢
  • 2012-03-15
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2011-10-23
  • 2015-03-26
  • 2022-01-06
  • 2015-06-06
相关资源
最近更新 更多