gpt4 book ai didi

Python笛卡尔积和条件?

转载 作者:太空宇宙 更新时间:2023-11-03 12:39:23 24 4
gpt4 key购买 nike

在 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 的笛卡尔积函数的便利性。

有什么想法或替代方案吗?感谢任何帮助,谢谢。

最佳答案

python 3

在 Python 3 中,您可以使用 itertools.filterfalse 过滤掉不需要的组合:

# predicate is true when need to skip the combination
predicate = (lambda (a1, a2, b1, b2): a1 <= a2 and (b1 != 0 or b2 == 5), params)
filtered_params = itertools.filterfalse(predicate, params)

python 2

您可以使用列表理解或 itertools.ifilter :

filtered_params = itertools.ifilter
(lambda (a1, a2, b1, b2): a1 <= a2 and (b1 != 0 or b2 == 5), params)

请注意,这两个版本都在底层进行循环和过滤。如果你想避免这种情况,你需要构建一个改进的算法来创建没有不需要的元组。

关于Python笛卡尔积和条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27891032/

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