Python 给定总体和子集,如何创建所有组合的列表?(nCr)
我试图得到一个列表,其中包含给定总体和给定子集的所有组合 在这个例子中,假设人口为12,子集为3。根据组合公式(nCr),我知道应该有220个组合。如何获得220种可能组合的列表 示例结果:Python 给定总体和子集,如何创建所有组合的列表?(nCr),python,math,statistics,Python,Math,Statistics,我试图得到一个列表,其中包含给定总体和给定子集的所有组合 在这个例子中,假设人口为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个索引的所有可能
[[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]]