gpt4 book ai didi

python - 如何获取 itertools.product 的长度?

转载 作者:太空狗 更新时间:2023-10-29 17:45:50 29 4
gpt4 key购买 nike

我正在使用 itertools 运行数值模拟,迭代输入参数的所有可能组合。在下面的示例中,我有两个参数和六种可能的组合:

import itertools

x = [0, 1]
y = [100, 200, 300]

myprod = itertools.product(x, y)

for p in myprod:
print p[0], p[1]
# run myfunction using p[0] as the value of x and p[1] as the value of y

如何获取 myprod 的大小(示例中为 6)?我需要在 for 循环开始之前打印它。

我明白 myprod 不是列表。我可以计算 len(list(myprod)),但这会消耗迭代器,因此 for 循环不再有效。

我试过:

myprod2=copy.deepcopy(myprod)
mylength = len(list(myprod2))

但这也行不通。我可以这样做:

myprod2=itertools.product(x,y)
mylength = len(list(myprod2))

但它算不上优雅和 python 式!

最佳答案

为任意数量的源可迭代对象实现 Kevin's answer,结合 reducemul:

>>> import functools, itertools, operator
>>> iters = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> functools.reduce(operator.mul, map(len, iters), 1)
27
>>> len(list(itertools.product(*iters)))
27

请注意,如果您的源可迭代对象本身是迭代器而不是序列,这将不起作用,原因与您最初尝试获取 itertools.product 的长度失败的原因相同。 Python 通常和 itertools 可以以内存高效的方式处理任何长度(包括无限!)的迭代器,因此预先找出长度并不是它设计用来处理的情况。

关于python - 如何获取 itertools.product 的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32074543/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com