发电机输出长度

美心:

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,似乎我在尝试时出错,它可以正常工作。抱歉,添麻烦了。

亚当·罗森菲尔德(Adam Rosenfield):

没有一个是因为您通常无法做到这一点-如果您有一个惰性无限生成器怎么办?例如:

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章