如何获取两个不同列表的所有可能组合?

问题描述:

我有这么多的麻烦理解我的问题:如何获取两个不同列表的所有可能组合?

我有2所列出:

from = ['A', 'B', 'C'] 
to = ['D', 'E', 'F'] 

我需要产生从一个列表结合每个项目的其他这样一个矩阵:

final = [[['A', 'D'], ['B', 'E'], ['C', 'F']], 
     [['A', 'D'], ['B', 'F'], ['C', 'E']], 
     [['A', 'E'], ['B', 'F'], ['C', 'D']], 
     [['A', 'E'], ['B', 'D'], ['C', 'F']], 
     [['A', 'F'], ['B', 'D'], ['C', 'E']], 
     [['A', 'F'], ['B', 'E'], ['C', 'D']]] 

我试图用这个做到这一点:

for i in range(len(initial)): 
    for j in range(len(transformed)): 
     self.semantic_networks[j][i][0] = self.initial_figure[i]['name'] 
     self.semantic_networks[i][j][1] = self.transformed_figure[(j + i) % len(self.transformed_figure)]['name'] 

但是,我只得到顶端:

[['A', 'D'], ['B', 'E'], ['C', 'F']] 
[['A', 'E'], ['B', 'F'], ['C', 'D']] 
[['A', 'F'], ['B', 'D'], ['C', 'E']] 
[[0, 0], [0, 0], [0, 0]] 
[[0, 0], [0, 0], [0, 0]] 
[[0, 0], [0, 0], [0, 0]] 

我想要得到什么?组合?排列?组合组合?

任何提示???

应用itertools.permutations所述第二列表上,然后zip每个排列与第一列表。

from itertools import permutations 

lst1 = ['A', 'B', 'C'] 
lst2 = ['D', 'E', 'F'] 

for p in permutations(lst2): 
    print zip(lst1, p) 
# 
[('A', 'D'), ('B', 'E'), ('C', 'F')] 
[('A', 'D'), ('B', 'F'), ('C', 'E')] 
[('A', 'E'), ('B', 'D'), ('C', 'F')] 
[('A', 'E'), ('B', 'F'), ('C', 'D')] 
[('A', 'F'), ('B', 'D'), ('C', 'E')] 
[('A', 'F'), ('B', 'E'), ('C', 'D')] 
+0

OMG这正是我一直在寻找...谢谢!这么简单,我花了几个小时在同一件事上,不敢相信。 – mimoralea 2014-10-04 22:52:34

看来你想要所有可能的排列组合:

import itertools 
a = ['A', 'B', 'C'] 
b = ['D', 'E', 'F'] 
items = zip(itertools.permutations(a), itertools.permutations(b)) 
+0

不完全是,它不是我要找的最终结果。 – mimoralea 2014-10-04 22:53:01

+0

@mimoralea:我知道,但是从这里你可以创建最终的结果。 – 2014-10-04 23:01:47

+0

@SimeonVisser:答案是有点差。它也没有解决原始问题,也没有显示如何从两个排列的元组列表中继续。 [((A,B,C),(d,E,F)),...] – 2014-10-04 23:19:46