【问题标题】:Is it possible to call more than one next value of an infinite python generator at once?是否可以一次调用多个无限 python 生成器的下一个值?
【发布时间】:2020-09-07 23:12:06
【问题描述】:

有什么方法可以在不循环或调用 next() n 次的情况下获取生成器的下 n 个值? 在这种情况下生成器是无限的,不能转换为列表。 这是生成器函数:

def f():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

以下循环都给出了预期的结果,但我想知道是否有其他方法可以做到这一点。

gen = f()
n = 0
while n < 10:
    print(next(gen))
    n += 1

或者..

for n, i in enumerate(f()):
    if n < 10:
        print(i)
    else:
        break

【问题讨论】:

  • 既然生成器生成斐波那契数,如果你知道前两个元素a,b,你可以通过a+b推断出第三个元素。
  • itertools.islice 是您要找的。​​span>
  • @Ch3steR 谢谢.. 这确实是我要找的

标签: python generator


【解决方案1】:

有几种方法可以做到这一点。一种方法是使用列表推导,类似于您上面已经拥有的。例如:

gen = f()
elements = [next(gen) for _ in range(10)]

另一种方法是使用itertools module 之类的东西,例如takeWhile()- 或islice()- 函数。

还可以查看How to get the n next values of a generator in a list (python)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2019-12-15
    • 2019-02-03
    • 2013-07-15
    相关资源
    最近更新 更多