python - 给定总体和子集,如何创建所有组合的列表?(nCr)
问题描述
我正在尝试获取具有给定人口和给定子集的所有组合的列表列表。
对于此示例,假设总体为 12,子集为 3。根据组合公式 (nCr),我知道应该有 220 个组合。如何获得所有 220 种可能组合的列表?
示例结果:
[[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
etc.,
etc.,
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1]]
解决方案
您可以生成您拥有的 3 个索引的所有可能组合,并相应地构建每个输出:
from itertools import combinations
def combs(n, r):
for comb in combinations(range(n), r):
yield [1 if i in comb else 0 for i in range(n)]
使用您的值运行示例:
c = list(combs(12, 3))
print(len(c))
# 220
我们有预期的组合数量,请参见第一个:
print(c[:5])
# [[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
# [1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
# [1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
# [1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
# [1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]]
推荐阅读
- firebase - 如何解决异常错误:名称为 [DEFAULT] 的 FirebaseApp 不存在?
- c++ - 当类具有`unsigned char&operator []`时如何使用std :: copy
- azure - Sharepoint 站点未显示在 Azure 逻辑应用 Sharepoint 连接器中
- javascript - React 将数据从同一个子组件多次传递给父组件
- python - 循环 Python 类中的对象实例
- c# - 我的无敌框架功能存在问题
- android - mockwebserver 不拦截 openConnection
- python-3.x - 在 pandas 列中查找特定单词并分配给新列并复制该行
- rspec - 我可以自动将共享示例添加到某些测试吗?
- apache-zookeeper - 启动 Atlas 时服务器 null 的会话 0x0