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

时间:2018-04-23 16:35:48

标签: python numpy math combinations probability

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

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

但是如果我从两个罐子里拿出两个球(首先我会在一个5个球的罐子里挑一个球并在另一个罐子里再做一次)怎么办?我怎样才能得到所有组合的可能列表?

1 个答案:

答案 0 :(得分:1)

假设第一个罐子里的球被编号为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)

表示来自第一个jar的球1,2,3,来自第二个jar的球31和来自第三个jar的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))]