python - 与重复的组合
问题描述
使用itertools.combinations
(或任何其他功能)我想知道可以通过以下要求完成多少组合:
- 有 4 个数组,每个数组的长度
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')
。顺序无关紧要。我怎么能那样做?
解决方案
既然您提到顺序无关紧要,我认为对于您的示例,正确的答案应该只产生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')]
推荐阅读
- c# - 没有 App.config 的实体框架,数据库优先,存储库模式,N 层解决方案架构
- linux - 为什么这不会杀死远程进程?
- python - matplotlib 2.2.2 最大化绘图
- java - 在 JTable Java 中显示 JSONArray
- javascript - 如何使用左箭头和右箭头在jQuery中实现分页
- docker-compose - openmaptiles-如何在 docker-compose 中编写
- database - Sanic:无法连接 Aerospike
- hana - 在 SAP HANA 计算视图 (sps12) 中的单个输入参数中传递多个值时出错
- python - 在循环中解析 XML 数据以在 Python 3 中创建多个对象
- c# - Winforms .net 4.7 应用程序在 OnUserChanged SystemEvent 中冻结