2015-11-28 57 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