2
我有一个包含以下元素的列表:A,B,C,D,E,F,G
。
它们要么假设为真或假,因此分别由1
和0
表示。使用Python排列列表
我应该得到一个组合,但以下限制留:
- 元
C
和Fare to be true in all cases, ie,
1`。 - 当元素
A
为true时,元素E
和G
可能为false。 - 当元素
B
为true时,元素D
可能为false。
我有一个包含以下元素的列表:A,B,C,D,E,F,G
。
它们要么假设为真或假,因此分别由1
和0
表示。使用Python排列列表
我应该得到一个组合,但以下限制留:
C
和F are to be true in all cases, ie,
1`。A
为true时,元素E
和G
可能为false。B
为true时,元素D
可能为false。你想要的不是排列,而是产品。另外,我解释限制为:
因此,代码如下:
import pprint
from itertools import product
def myproduct():
keys = 'abcdefg'
values = [(0, 1) for k in keys]
for value in product(*values):
d = dict(zip(keys, value))
# Skip: C and F that are 0 (False)
if d['c'] == 0 or d['f'] == 0:
continue
# Skip: When A is false, E and G cannot be false
if d['a'] == 0 and (d['e'] == 0 or d['g'] == 0):
continue
# Skip: When B is false, D cannot be false
if d['b'] == 0 and d['d'] == 0:
continue
yield d # This 'permutation' is good
for d in myproduct():
pprint.pprint(d)
输出:
{'a': 0, 'b': 0, 'c': 1, 'd': 1, 'e': 1, 'f': 1, 'g': 1}
{'a': 0, 'b': 1, 'c': 1, 'd': 0, 'e': 1, 'f': 1, 'g': 1}
{'a': 0, 'b': 1, 'c': 1, 'd': 1, 'e': 1, 'f': 1, 'g': 1}
{'a': 1, 'b': 0, 'c': 1, 'd': 1, 'e': 0, 'f': 1, 'g': 0}
{'a': 1, 'b': 0, 'c': 1, 'd': 1, 'e': 0, 'f': 1, 'g': 1}
{'a': 1, 'b': 0, 'c': 1, 'd': 1, 'e': 1, 'f': 1, 'g': 0}
{'a': 1, 'b': 0, 'c': 1, 'd': 1, 'e': 1, 'f': 1, 'g': 1}
{'a': 1, 'b': 1, 'c': 1, 'd': 0, 'e': 0, 'f': 1, 'g': 0}
{'a': 1, 'b': 1, 'c': 1, 'd': 0, 'e': 0, 'f': 1, 'g': 1}
{'a': 1, 'b': 1, 'c': 1, 'd': 0, 'e': 1, 'f': 1, 'g': 0}
{'a': 1, 'b': 1, 'c': 1, 'd': 0, 'e': 1, 'f': 1, 'g': 1}
{'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 0, 'f': 1, 'g': 0}
{'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 0, 'f': 1, 'g': 1}
{'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1, 'f': 1, 'g': 0}
{'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1, 'f': 1, 'g': 1}
注:
values
是(0, 1)
列表:
[(0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1)]
每个value
是一个元组7号如:
(1, 1, 1, 0, 0, 1, 0)
d
是一个字典,其中键是一个,b,...,值是0 和
_“如果元素A为真,元素E和G可以是假的”_是否意味着_“E和G可能是假或真”_或_“E和G必须是假的”_? – furas
看起来像另一个*你可以做我的作业*的问题。我可能是错的(希望如此),在这种情况下,你可以把你到目前为止尝试过的吗?我们可以从那里帮助你。 –
听起来像作业。为了你自己的缘故,请阅读[这封信](http://meta.programmers.stackexchange.com/questions/6166)。 –