在不将元素存储在内存中的情况下,计算可迭代元素数量(通过迭代)的最佳方法是什么?
现在,我正在做sum(1 for x in iterable)
。我希望在itertools
找到一些东西,但似乎没有任何东西。
答案 0 :(得分:2)
sum(1 for x in iterable)
是最好的方法。并非所有内容都需要专用的itertools
功能。 :-)我注意到post you claim not to be a dupe of上的最高投票答案也建议你使用它。
当然,看看itertools
以防万一,总是很有价值,如果你这样做,别忘了查看recipes section;你会发现quantify()
食谱几乎完全相同,但是使用谓词来过滤迭代:
def quantify(iterable, pred=bool):
"Count how many times the predicate is true"
return sum(imap(pred, iterable))
答案 1 :(得分:1)
IMO这个功能应该包含在itertools中,但不是。
more-itertools是一个包含ilen
的软件包,但对于您的情况可能有点重量级。当我遇到这种情况时,我只需将常用的解决方法定义为ilen
:
def ilen(iterable):
return sum(1 for _ in iterable)