列表列表的所有可能组合

agn*_*aft 1 python algorithm permutation data-structures

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

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以最干净的方式获得所有组合.我确信这是以前由某人完成的,但是在谷歌和堆栈上进行了一些搜索后,我放弃了找到正确的关键字组合,以找到适合此问题的算法.

有什么想法解决这个最干净的算法是什么?

Dav*_*d Z 10

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