如何展示在一个20个球的罐子里挑3个球和在另外两个5个球的罐子里挑1个球的所有组合

2024-04-26 21:10:35 发布

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

我知道如何返回在一个由20个可能的球组成的罐子中挑选3个球的所有可能组合的列表:

list(itertools.combinations(range(1,21),3))

但是如果我有两个罐子里的两个球(首先我会在一个装有5个球的罐子里挑一个球,然后在另一个罐子里再做一次),我怎么能得到所有组合的可能列表呢?你知道吗


Tags: 列表rangelistitertools我会combinations个球罐子
1条回答
网友
1楼 · 发布于 2024-04-26 21:10:35

假设第一个罐子里的球编号为120,第二个罐子里的球编号为3135,第三个罐子里的球编号为4145,所以我们可以保持球和罐子笔直。然后将itertools.combinations函数与itertools.product组合,得到所有可能性的列表:

list(product(combinations(range(1,21),3), range(31,36), range(41,46)))

这将是一个长长的清单,有28500个项目。列表中的第一项是

((1, 2, 3), 31, 41)

意思是球1,2,3来自第一个罐子,球31来自第二个罐子,球41来自第三个罐子。最后一项是

((18, 19, 20), 35, 45)

意思很明显。如果您只想要一个由5个数字组成的元组,而不需要任何内部元组,例如(1, 2, 3, 31, 41),您可以用多种方式“展平”元组,例如

[(*v[0], *v[-2:]) for v in
    product(combinations(range(1,21),3), range(31,36), range(41,46))]

相关问题 更多 >