2015-11-28 54 views
2

我有一个包含以下元素的列表:A,B,C,D,E,F,G
它们要么假设为真或假,因此分别由10表示。使用Python排列列表

我应该得到一个组合,但以下限制留:

  1. C和F are to be true in all cases, ie, 1`。
  2. 当元素A为true时,元素EG可能为false。
  3. 当元素B为true时,元素D可能为false。
+3

_“如果元素A为真,元素E和G可以是假的”_是否意味着_“E和G可能是假或真”_或_“E和G必须是假的”_? – furas

+0

看起来像另一个*你可以做我的作业*的问题。我可能是错的(希望如此),在这种情况下,你可以把你到目前为止尝试过的吗?我们可以从那里帮助你。 –

+0

听起来像作业。为了你自己的缘故,请阅读[这封信](http://meta.programmers.stackexchange.com/questions/6166)。 –

回答

1

你想要的不是排列,而是产品。另外,我解释限制为:

  1. C和F不能是
  2. 如果A是,E和G不能是
  3. 如果B是,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