2015-05-26 51 views
0

我正在嘗試在Python中編寫一個解決PictoLogic遊戲的程序。我目前正在嘗試從橫向編號中編寫所有可能的主板。所以,我有這樣的事情:在列表中查找組合(Python)

lines = [[all possible combos for line 1], [same for line 2], [same for line 3], etc] 

這個列表是兩種不同長度的,而且我也有另一個版本中,他們將是一個字典(與indexex 1,2,3,等等。 )

這個想法是獲得所有可能的電路板組合。例如:

lines = [["aa", "ab", "ba"], ["cc"]] 

會導致成

[["aa", "cc"], ["ab", "cc"], ["ba", "cc"]] 

也就是說,而是兩種不同長度的名單,而不是事先知道的行數。 在此先感謝和抱歉不好英語

回答

0

您將與itertools.product做到這一點,拆包經營者*:

lines = [["aa", "ab", "ba"], ["cc"]] 
from itertools import product 
print list(list(t) for t in product(*lines)) 
# >>> [['aa', 'cc'], ['ab', 'cc'], ['ba', 'cc']] 
+0

完美的作品!謝謝:D – Knexator

2

您可以使用itertools.product和子列表傳遞給該結與拆箱作業(*):

>>> lines = [['aa', 'ab', 'ba'], ['cc']] 
>>> from itertools import product 
>>> list(product(*lines)) 
[('aa', 'cc'), ('ab', 'cc'), ('ba', 'cc')] 

如果你想要的結果作爲列表中,您可以使用map功能:

>>> map(list,product(*lines)) 
[['aa', 'cc'], ['ab', 'cc'], ['ba', 'cc']] 
+0

請注意,列表的內容是元組,而不是列表 – Zizouz212

+0

@ Zizouz212是的,並將它們轉換爲列表OP可以使用'map'功能! – Kasramvd

2

考慮是這樣的:

a = ['a', 'b', 'c'] 
b = ['x', 'y'] 

print [[i,j] for i in a for j in b] 
>> [['a', 'x'], ['a', 'y'], ['b', 'x'], ['b', 'y'], ['c', 'x'], ['c', 'y']]