Itertools 组合/排列大小

mik*_*mik 2 python python-itertools

是否真的可以看到 itertools.Combination 或其他对象的 len() ,而不将其具体化到列表中?
我可以用阶乘得到梳子的基数或排列,......但我想要一些概括的东西。

谢谢

Tim*_*ers 9

对于任何 iterable it,您可以执行以下操作:

length = sum(1 for ignore in it)
Run Code Online (Sandbox Code Playgroud)

这不会创建列表,因此内存占用很小。但是对于很多iterables来说,也是消费的 it(比如如果it是generator,就被消费了,不能重启;如果it是list,就不消费)。通常没有“非破坏性”的方法来确定任意迭代的长度。

另请注意,如果it提供无限的对象序列,上面的代码将“永远”运行。

  • 这会修改迭代器,以便尝试再次迭代它不会执行任何操作。为了缓解我使用itertools的情况,我做了:`import itertools`,然后`itCopy = itertools.tee(it)`,然后`length = sum(1 forignore in itCopy)`,然后`for i in list (它):..` (2认同)