【发布时间】:2015-05-06 09:33:55
【问题描述】:
所以我有这些列表:
a = [1, 2, 3]
b = [11, 12, 13, 14]
c = [21, 22, 23, 24, 25, 26]
我想获取所有可能的组合(重复即可),其中包含来自 a 的 2 个元素、来自 b 的 3 个元素和来自 c 的 3 个元素。像这样:
([1, 2], [11, 12, 13], [21, 22, 23]) # 1
([1, 2], [11, 12, 13], [22, 23, 24]) # 2
# all the way to...
([2, 3], [12, 13, 14], [24, 25, 26]) # 16
如果我使用itertools.product(),它只会给我每个列表中的 1 个:
import itertools
def cartesian(the_list):
for i in itertools.product(*the_list):
yield i
a = [1, 2, 3]
b = [11, 12, 13, 14]
c = [21, 22, 23, 24, 25, 26]
test = cartesian([a, b, c])
print(next(test))
# Gives (1, 11, 21). But I need ([1, 2], [11, 12, 13], [21, 22, 23])
print(next(test))
# Gives (1, 11, 22). But I need ([1, 2], [11, 12, 13], [22, 23, 24])
我可以使用多个嵌套的for 循环,但如果我有很多列表,我将需要太多循环。
那么我该如何实现一个算法,它可以给我所有可能的组合,每个组合都由每个输入列表中的一定数量的元素组成?
【问题讨论】:
标签: python list python-3.x itertools cartesian-product