【发布时间】:2010-09-28 10:16:18
【问题描述】:
Python 提供了一种很好的方法来获取急切可迭代的长度,即len(x)。但是对于由生成器理解和函数表示的惰性迭代,我找不到任何类似的东西。当然,这样写也不难:
def iterlen(x):
n = 0
try:
while True:
next(x)
n += 1
except StopIteration: pass
return n
但我无法摆脱我正在重新实现自行车的感觉。
(当我输入函数时,我突然想到一个想法:也许真的没有这样的函数,因为它“破坏”了它的论点。不过,这对我来说不是问题)。
P.S.:关于第一个答案 - 是的,像 len(list(x)) 这样的东西也可以,但这会大大增加内存的使用。
P.P.S.:重新检查...忽略 P.S.,似乎我在尝试时犯了一个错误,它工作正常。给您添麻烦了。
【问题讨论】:
-
建议将标题更改为 仅生成器输出的长度 -- 可以丢弃迭代的项目。否则这个问题会与another 混淆。
-
reimplementing a bicycle- 几乎就像重新发明轮子一样,只有程序员这么说。