我试图用Python编写程序来解决PictoLogic游戏问题。我目前正在尝试从水平数字中编写所有可能的电路板。所以,我有这样的事情:
lines = [[all possible combos for line 1], [same for line 2], [same for line 3], etc]
这个列表有不同的长度,我还有另一个版本,它们将成为一个dict(带有indexex 1,2,3等)
想法是获得所有可能的电路板组合。例如:
lines = [["aa", "ab", "ba"], ["cc"]]
将导致
[["aa", "cc"], ["ab", "cc"], ["ba", "cc"]]
那,但是有不同长度的列表,并且事先不知道行数。 提前致谢,对不好的英语表示抱歉
答案 0 :(得分: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']]
答案 1 :(得分: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']]
答案 2 :(得分: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']]