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,似乎我在尝试时出错,它可以正常工作。抱歉,添麻烦了。
没有一个是因为您通常无法做到这一点-如果您有一个惰性无限生成器怎么办?例如:
def fib():
a, b = 0, 1
while True:
a, b = b, a + b
yield a
这永远不会终止,但会生成斐波那契数。您可以通过拨打来获得任意数量的斐波纳契数next()
。
如果您确实需要知道项的数量,那么无论如何都无法一次线性地遍历它们,因此只能使用其他数据结构,例如常规列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句