Itertools.product为每个输入自定义组合的数量?

2024-06-17 12:45:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用itertools.product我不擅长用例子来解释,所以这里的代码是原样的。在

group1=[1,2,3];group2=[4,5,6];group3=[7,8,9]
list(itertools.product(group1,group2,group3))

这给了我每组1的所有组合。但是我该如何从第1组中得到2个数字的组合,从第2组中得到2个数字,从第3组中得到1个数字的组合呢?在

例如,我希望组合(1,2,5,6,9)出现在列表中。可以定制这个吗?itertools.product似乎没有我所需要的那样灵活,而且我在学习笛卡尔积的过程中也不成功,足以理解如何调整.product函数。在

编辑:为了简单起见,我将组缩小,但是每个组都有数百个唯一的值。在


Tags: 函数代码编辑列表过程数字productlist
1条回答
网友
1楼 · 发布于 2024-06-17 12:45:03

取每组r-组合的笛卡尔积:

from itertools import product, chain, combinations, permutations

groups = [[1,2,3],[4,5,6],[7,8,9]]
counts = (2, 2, 1)

selections = [combinations(g, c) for g, c in zip(groups, counts)]

for n_tuple in product(*selections):
    print(tuple(chain.from_iterable(n_tuple)))

输出:

^{pr2}$

如果从每个组中选择时顺序很重要(例如,如果(3, 2, 5, 6, 9)(2, 3, 5, 6, 9)不同),可以将combinations更改为{}。在

您应该注意,这会从N组中生成choose(|g1|, c1) * choose(|g2|, c2) * ... * choose(|gN|, cN)元素,其中choose(n, k)是{a1}。如果你的团队规模如你所说的数百个,或者如果团队的数量也很大,那么这个数字是无法估量的。在

相关问题 更多 >