给出两个任意长度的列表:
list1 = ['a', 'b', 'c']
list2 = ['1', '2', '3']
list1
是对象列表,list2
是每个对象的可能值。如何找到这两个列表的所有可能组合(我不确定这是否是正确的术语)
预期产出:
[
[('a', '1'), ('b', '1'), ('c', '1')],
[('a', '1'), ('b', '1'), ('c', '2')],
[('a', '1'), ('b', '1'), ('c', '3')],
[('a', '2'), ('b', '1'), ('c', '1')],
[('a', '2'), ('b', '1'), ('c', '2')],
[('a', '2'), ('b', '1'), ('c', '3')],
[('a', '3'), ('b', '1'), ('c', '1')],
[('a', '3'), ('b', '1'), ('c', '2')],
[('a', '3'), ('b', '1'), ('c', '3')],
# etc
]
答案 0 :(得分:4)
您可以使用itertools.product()获取输入可迭代的笛卡尔积,并压缩它们:
from itertools import product
a = ['a', 'b', 'c']
b = ['1', '2', '3']
print([list(zip(a, p)) for p in product(b,repeat=3)])
输出:
[[('a', '1'), ('b', '1'), ('c', '1')], [('a', '1'), ('b', '1'), ('c', '2')], [('a', '1'), ('b', '1'), ('c', '3')], [('a', '1'), ('b', '2'), ('c', '1')], [('a', '1'), ('b', '2'), ('c', '2')], [('a', '1'), ('b', '2'), ('c', '3')], [('a', '1'), ('b', '3'), ('c', '1')], [('a', '1'), ('b', '3'), ('c', '2')], [('a', '1'), ('b', '3'), ('c', '3')], [('a', '2'), ('b', '1'), ('c', '1')], [('a', '2'), ('b', '1'), ('c', '2')], [('a', '2'), ('b', '1'), ('c', '3')], [('a', '2'), ('b', '2'), ('c', '1')], [('a', '2'), ('b', '2'), ('c', '2')], [('a', '2'), ('b', '2'), ('c', '3')], [('a', '2'), ('b', '3'), ('c', '1')], [('a', '2'), ('b', '3'), ('c', '2')], [('a', '2'), ('b', '3'), ('c', '3')], [('a', '3'), ('b', '1'), ('c', '1')], [('a', '3'), ('b', '1'), ('c', '2')], [('a', '3'), ('b', '1'), ('c', '3')], [('a', '3'), ('b', '2'), ('c', '1')], [('a', '3'), ('b', '2'), ('c', '2')], [('a', '3'), ('b', '2'), ('c', '3')], [('a', '3'), ('b', '3'), ('c', '1')], [('a', '3'), ('b', '3'), ('c', '2')], [('a', '3'), ('b', '3'), ('c', '3')]]