小编典典

发电机输出的长度

python

Python提供了一种很好的方法来获取渴望的迭代的长度len(x)。但是对于以生成器理解和函数表示的惰性可迭代对象,我找不到类似的东西。当然,编写类似以下内容并不难:

def iterlen(x):
  n = 0
  try:
    while True:
      next(x)
      n += 1
  except StopIteration: pass
  return n

但是我无法摆脱自己重新设计自行车的感觉。

(当我键入函数时,我想到了一个想法:也许确实没有这样的函数,因为它“破坏了”其参数。不过,对于我的情况而言,这不是问题)。

PS:关于第一个答案-是的,类似的方法len(list(x))也可以工作,但是会大大增加内存的使用率。

PPS:重新检查…忽略PS,似乎我在尝试时出错,它可以正常工作。抱歉,添麻烦了。


阅读 179

收藏
2020-12-20

共1个答案

小编典典

没有一个是因为在一般情况下您无法执行此操作-如果您有一个惰性无限生成器怎么办?例如:

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

这永远不会终止,但会生成斐波那契数。您可以通过拨打来获得任意数量的斐波纳契数next()

如果您确实需要知道项的数量,那么无论如何都无法一次线性地遍历它们,因此只能使用其他数据结构,例如常规列表。

2020-12-20