Python生成13元素可重复无序5长度组合的代码问题求助
解决方法:生成无序可重复组合
哦,我明白问题出在哪啦!你现在用的product生成的是笛卡尔积——也就是所有有序的重复排列,但你要的是无序且允许重复元素的组合,这俩完全不是一回事儿~
为什么product不符合需求?
product(N, repeat=5)会生成所有可能的有序五元组,比如(0,1,2,3,4)和(1,0,2,3,4)会被当成两个不同的结果,总数量是13^5=371293,远大于你需要的6188种无序组合。
正确的实现方式
Python的itertools模块里有专门处理这类需求的函数:combinations_with_replacement,它会生成不考虑顺序、允许元素重复的组合,正好匹配你的需求。
修改后的代码如下:
from itertools import combinations_with_replacement N = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] for item in combinations_with_replacement(N, 5): print(item)
验证组合数量
如果你想确认结果数量是否正确,可以运行以下代码:
print(len(list(combinations_with_replacement(N, 5))))
输出结果正好是6188,和你用多重组合公式计算的结果一致(公式为C(n+k-1, k),其中n=13,k=5,即C(17,5)=6188)。
内容的提问来源于stack exchange,提问作者ca123
相关产品推荐
相关产品推荐

