我有一个相当复杂的问题(或者在我看来)。我有一个字典,其中包含键入的元素列表和该字典的键列表
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)
任何适用于任意数量的群组的更智能的解决方案?
答案 0 :(得分:1)
您可以使用itertools.product
,list 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