繁体   English   中英

与重复的组合

[英]Combinations with repetitions

使用itertools.combinations (或任何其他功能),我想知道满足以下要求可以完成多少组合:

  • 有 4 个 arrays,每个长度分别为5, 6, 7, 8
  • 组合由5个元素组成

所以每个数组是:

A = ['A', 'A', 'A', 'A', 'A']
B = ['B', 'B', 'B', 'B', 'B', 'B']
C = ['C', 'C', 'C', 'C', 'C', 'C', 'C']
D = ['D', 'D', 'D', 'D', 'D', 'D', 'D', 'D']

例如,组合将是:( ('A', 'A', 'A', 'A', 'A')('A', 'D', 'D', 'B', 'C') 订单无关紧要。 我怎么能那样做?

将四个列表全部添加到一个列表中,然后将参数设置为combinations function。您也可以将所有列表添加到combination function中。

from itertools import combinations

A = ['A', 'A', 'A', 'A', 'A']
B = ['B', 'B', 'B', 'B', 'B', 'B']
C = ['C', 'C', 'C', 'C', 'C', 'C', 'C']
D = ['D', 'D', 'D', 'D', 'D', 'D', 'D', 'D']

comb = combinations(A+B+C+D, 5) 
for c in comb:
  print(c)

既然你提到顺序无关紧要,我认为对于你的例子,正确答案应该只产生56种组合。

你可以使用这个:

from itertools import combinations_with_replacement

combi = list(combinations_with_replacement(set(A+B+C+D), 5))

对于您的示例,使用此解决方案, print(len(combi))print(combi)产生以下输出:

56

[('C', 'C', 'C', 'C', 'C'),
 ('C', 'C', 'C', 'C', 'A'),
 ('C', 'C', 'C', 'C', 'B'),
 ('C', 'C', 'C', 'C', 'D'),
 ('C', 'C', 'C', 'A', 'A'),
 ('C', 'C', 'C', 'A', 'B'),
 ('C', 'C', 'C', 'A', 'D'),
 ('C', 'C', 'C', 'B', 'B'),
 ('C', 'C', 'C', 'B', 'D'),
 ('C', 'C', 'C', 'D', 'D'),
 ('C', 'C', 'A', 'A', 'A'),
 ('C', 'C', 'A', 'A', 'B'),
 ('C', 'C', 'A', 'A', 'D'),
 ('C', 'C', 'A', 'B', 'B'),
 ('C', 'C', 'A', 'B', 'D'),
 ('C', 'C', 'A', 'D', 'D'),
 ('C', 'C', 'B', 'B', 'B'),
 ('C', 'C', 'B', 'B', 'D'),
 ('C', 'C', 'B', 'D', 'D'),
 ('C', 'C', 'D', 'D', 'D'),
 ('C', 'A', 'A', 'A', 'A'),
 ('C', 'A', 'A', 'A', 'B'),
 ('C', 'A', 'A', 'A', 'D'),
 ('C', 'A', 'A', 'B', 'B'),
 ('C', 'A', 'A', 'B', 'D'),
 ('C', 'A', 'A', 'D', 'D'),
 ('C', 'A', 'B', 'B', 'B'),
 ('C', 'A', 'B', 'B', 'D'),
 ('C', 'A', 'B', 'D', 'D'),
 ('C', 'A', 'D', 'D', 'D'),
 ('C', 'B', 'B', 'B', 'B'),
 ('C', 'B', 'B', 'B', 'D'),
 ('C', 'B', 'B', 'D', 'D'),
 ('C', 'B', 'D', 'D', 'D'),
 ('C', 'D', 'D', 'D', 'D'),
 ('A', 'A', 'A', 'A', 'A'),
 ('A', 'A', 'A', 'A', 'B'),
 ('A', 'A', 'A', 'A', 'D'),
 ('A', 'A', 'A', 'B', 'B'),
 ('A', 'A', 'A', 'B', 'D'),
 ('A', 'A', 'A', 'D', 'D'),
 ('A', 'A', 'B', 'B', 'B'),
 ('A', 'A', 'B', 'B', 'D'),
 ('A', 'A', 'B', 'D', 'D'),
 ('A', 'A', 'D', 'D', 'D'),
 ('A', 'B', 'B', 'B', 'B'),
 ('A', 'B', 'B', 'B', 'D'),
 ('A', 'B', 'B', 'D', 'D'),
 ('A', 'B', 'D', 'D', 'D'),
 ('A', 'D', 'D', 'D', 'D'),
 ('B', 'B', 'B', 'B', 'B'),
 ('B', 'B', 'B', 'B', 'D'),
 ('B', 'B', 'B', 'D', 'D'),
 ('B', 'B', 'D', 'D', 'D'),
 ('B', 'D', 'D', 'D', 'D'),
 ('D', 'D', 'D', 'D', 'D')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM