【发布时间】:2015-01-11 19:15:58
【问题描述】:
在 Python 中,我使用 itertools.product() 函数为模拟生成输入参数。
我有一个需要 4 个输入参数 a1、a2、b1 和 b2 的测试函数。我使用以下代码生成参数。示例:
params = itertools.product(range(10,41,2), range(10,41,2), range(0, 2), range(5, 31, 5))
... 这给了我 3072 种组合。不幸的是,某些组合在逻辑上没有意义。例如。如果 a2 大于 a1 则测试结果是无用的,同样当 b1 等于 0 时 b2 的值是完全不相关的——所以测试这样的组合是没有意义的。
除了手动操作和嵌套 for 循环之外,是否有可能限制或过滤笛卡尔积?因为我的实际用例有超过 4 个参数,这就是为什么我喜欢 itertools 的笛卡尔积函数的便利性。
有什么想法或替代方案吗? 任何帮助表示赞赏,谢谢。
【问题讨论】:
-
如果您的用例要复杂得多,您可以查看像
numpy这样的数组包。 (例如,这不是您想要的,但可能是相关的:stackoverflow.com/questions/25744781/…) -
itertools.product没有过滤器参数,所以你必须自己做 - 要么编写自己的生成器,类似于itertools.product文档中的示例,要么过滤它 事后.