【发布时间】:2014-01-30 18:33:13
【问题描述】:
我有一个 fun 函数,它接受多个参数 p0,p1,.. 对于每个参数,我给出一个可能值的列表:
p0_list = ['a','b','c']
p1_list = [5,100]
我现在可以为 p0,p1 的每个组合调用我的函数
for i in itertools.product(*[p0,p1]):
print fun(i)
现在问题来了:如果我已经知道参数 p1 只对 fun 的结果有影响,如果 p0 是 'a' 或 'c' 怎么办?在这种情况下,我需要我的参数组合列表如下所示:
[('a', 5), ('a',100), ('b', 5), ('c',5), ('c', 100)]
所以 ('b', 100) 只是被省略了,因为它是对乐趣的不必要的评估。
我的最终解决方案:
param_lists = [['p0', ['a','b','c']],['p1', [5,100]]]
l = itertools.product(*[x[1] for x in param_lists])
l = [x for x in l if not x[0] == 'b' or x[1]==5]
我将这种方法用于 5 个参数和各种条件,效果很好。它也很容易阅读。此代码的灵感来自 Corley Brigmans 和 nmcleans 的答案。
【问题讨论】:
-
我个人会记住你的函数调用并用每个组合调用它。
-
这需要一种方法来判断哪些组合会产生相同的结果,然后我就有机会删除这些组合。对吗?
标签: python python-2.7 product itertools