Python 给定总体和子集,如何创建所有组合的列表?(nCr)

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个索引的所有可能

我试图得到一个列表,其中包含给定总体和给定子集的所有组合

在这个例子中,假设人口为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]]