有没有看到itertools.Combination或其他对象的len(),实际上没有将它实现到列表中?
我可以用阶乘法得到梳子或排列的基数,但我想要一些概括的东西。
由于
答案 0 :(得分:4)
对于任何可迭代的it
,您可以执行以下操作:
length = sum(1 for ignore in it)
这不会创建列表,因此内存占用量很小。但对于多种迭代,它也消耗 it
(例如,如果it
是一个生成器,它就被消耗掉了,无法重新启动;如果{{1}是一个列表,它没有消耗)。通常没有“非破坏性”的方法来确定任意迭代的长度。
另请注意,如果it
提供无限制的对象序列,上面的代码将“永久”运行。
答案 1 :(得分:1)
无需创建列表。您可以计算迭代中的项目数而不存储整个集合:
sum(1 for _ in myIterable)
答案 2 :(得分:1)
是,
def count_iterable(i):
return sum(1 for e in i)
取自:Is there any built-in way to get the length of an iterable in python?