【发布时间】:2019-06-25 01:59:23
【问题描述】:
我想编写一个 Python 脚本,提供一些变量和参数的所有可能组合,但始终在结果中包含所有变量。
我已经尝试了一些尝试,但我能得到的最接近的实际上是所有组合。例如,假设 a、b、c、d 和 e 可以为真或假。我想要所有可能的组合,但重要的是我每次都试图包含所有这些变量。因此,以下两个示例在结果中是有效的: a:真,b:假,c:假,d:假,e:假 a:true, b:true, c:false, d:false, e:false(注意b不同)
但以下不是我想要的: a:真,c:假
我想要所有可能的组合,但总是包括 a-e。
Martijn Pieters 已经提供了一个答案,这基本上是我想要的减去所有变量都表示的要求 (Find all possible combinations of arguments in Python)。以下是 Pieters 的代码:
from itertools import product
for combo in product((None, True, False), repeat=3):
arguments = {k: v for k, v in zip('abc', combo) if v is not None}
print arguments
>>> from itertools import product
>>> for combo in product((None, True, False), repeat=3):
... arguments = {k: v for k, v in zip('abc', combo) if v is not None}
... print arguments
...
{}
{'c': True}
{'c': False}
{'b': True}
{'c': True, 'b': True}
{'c': False, 'b': True}
{'b': False}
{'c': True, 'b': False}
{'c': False, 'b': False}
{'a': True}
{'a': True, 'c': True}
{'a': True, 'c': False}
{'a': True, 'b': True}
{'a': True, 'c': True, 'b': True}
{'a': True, 'c': False, 'b': True}
{'a': True, 'b': False}
{'a': True, 'c': True, 'b': False}
{'a': True, 'c': False, 'b': False}
{'a': False}
{'a': False, 'c': True}
{'a': False, 'c': False}
{'a': False, 'b': True}
{'a': False, 'c': True, 'b': True}
{'a': False, 'c': False, 'b': True}
{'a': False, 'b': False}
{'a': False, 'c': True, 'b': False}
{'a': False, 'c': False, 'b': False}
'''
忽略 None 选项,这几乎正是我一直在尝试做的,但在这个例子中,我不想只返回 a 是假的。我希望它返回更少的组合,因为应该始终包含 a、b 和 c。我想从中得到的只是它们是真是假的组合。
修改此示例以获得正确结果的最佳方法是什么?还是您推荐一种完全不同的方法?非常感谢。
【问题讨论】:
-
只需从 product 的第一个参数的元组中删除 None:for combo in product((True, False), repeat=3)。下一行不再需要“如果 v 不是无”,但保留它不会有任何影响,因为 v 永远不会是无。
-
这里没有回答吗? stackoverflow.com/questions/464864/…
标签: python combinations itertools