通过在Python中每个列表使用一个项目来生成组合(按特定顺序)?

时间:2014-09-17 09:54:16

标签: python-2.7 dictionary combinations combinatorics

我有一个相当复杂的问题(或者在我看来)。我有一个字典,其中包含键入的元素列表和该字典的键列表

numbers = { 
            'group1': [1, 2],
            'group2': [3, 4],
            'group3': [5, 6]
          }
order   = [ 'group1', 'group2', 'group3' ]

我希望按照给定的顺序,使用每个组一个数字来生成组合。所以我希望得到订单[ 'group1', 'group2', 'group3' ]

1, 3, 5
1, 3, 6
1, 4, 5
1, 4, 6
2, 3, 5
2, 3, 6
2, 4, 5
2, 4, 6

我有一个解决方案,但它不够通用且无法扩展:

group1=order[0]
group2=order[1]
group3=order[2]
for n in numbers[group1]:
    for n2 in numbers[group2]:
        for n3 in numbers[group3]:
            print(n, n2, n3)

任何适用于任意数量的群组的更智能的解决方案?

1 个答案:

答案 0 :(得分:1)

您可以使用itertools.productlist comprehension和元组解包的组合:

import itertools

for ns in itertools.product(*[numbers[g] for g in order]):
    print(*ns) # or 'print ns' for 2.x

这为我提供了您正在寻找的结果:

1 3 5
1 3 6
1 4 5
1 4 6
2 3 5
2 3 6
2 4 5
2 4 6