【发布时间】:2015-11-11 12:22:57
【问题描述】:
我正在使用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 的大小(示例中为六)?我需要在for 循环开始之前打印它。
我知道myprod 不是一个列表。我可以计算len(list(myprod)),但这会消耗迭代器,因此for 循环不再起作用。
我试过了:
myprod2=copy.deepcopy(myprod)
mylength = len(list(myprod2))
但这也不起作用。我可以这样做:
myprod2=itertools.product(x,y)
mylength = len(list(myprod2))
但它并不优雅和pythonic!
【问题讨论】:
-
获取迭代器的长度没有意义,而且有点破坏了使用迭代器的意义!不过,您可以解决...“这用完了(正确的术语是什么?)” - “消耗”,一般来说.
-
嗯,在我的具体情况下确实很有意义,因为(由于这里解释的原因太长)我需要在 for 循环开始之前获取组合总数
-
但是一般来说,由于迭代器不一定是有限的,如果不消耗它们就无法找出长度。
-
当然可以,但是对于我的迭代器总是有限的特定情况,你会推荐什么?你会推荐使用 itertools 以外的东西吗?