列表列表的所有可能组合

时间:2010-08-06 19:48:32

标签: python algorithm data-structures permutation

在组合列表中的列表时,我迫切需要一些算法帮助。假设我有以下数据结构:

fields = [  ['a1', 'a2', 'a3'],
            ['b1', 'b2', 'b3'],
            ['c1', 'c2', 'c3'],
            ['d1', 'd2', 'd3']  ]

我正在尝试编写一个生成器(Python),它将产生每个可能的项目组合,以便以下代码:

for x in thegenerator(fields):
    print(x)

会给出以下输出:

['a1', 'b1', 'c1', 'd1']
['a1', 'b1', 'c1', 'd2']
['a1', 'b1', 'c1', 'd3']
['a1', 'b1', 'c2', 'd1']
['a1', 'b1', 'c2', 'd2']
['a1', 'b1', 'c2', 'd3']
...
['a3', 'b3', 'c3', 'd3']

然而,我的思维方式今天完全没有了,所以我无法想象我最好如何迭代结构以使用Python获得所有组合最干净的方式。我确信之前已经有人这样做了,但是在google和stack上进行了几次搜索后,我放弃了找到正确的关键字组合,以找到适合此问题的算法。

任何想法是什么最干净的算法来解决这个问题?

2 个答案:

答案 0 :(得分:10)

只需使用itertools.product,它就完全符合您的要求。如果您对算法感兴趣,可以随时查看源代码。

答案 1 :(得分:3)

itertools.product(*fields)