获取双元素列表长度为48的可重复组合,使用combinations_with_replacement仅得49个如何解决
问题原因说明
你得到的49是itertools.combinations_with_replacement的正常运行结果,和你描述的「不考虑顺序的可重复组合」需求完全匹配:
对于仅有2个元素的源数组,生成长度为48的不考虑顺序的组合,本质上仅需要统计两个值的出现次数即可:0可以出现0次(全为17.1)、1次、2次……最多48次(全为0),总共49种可能,所以返回结果长度为49是正确的。
符合更大数量预期的解决方案
如果你预期得到更多的结果,说明你实际需要的是考虑顺序的可重复排列,即每个位置独立选择两个值中的一个,顺序不同就算不同的结果。这种场景请使用itertools.product函数,它会返回多个可迭代对象的笛卡尔积,刚好匹配该需求。
示例代码如下:
from itertools import product array = [0, 17.1] # repeat参数指定生成序列的长度 result = product(array, repeat=48) print(len(list(result))) # 输出结果为281474976710656,即2的48次方
选型总结
- 仅关心两个元素的出现频次、不关心摆放顺序:继续使用
combinations_with_replacement,49的结果是正确的 - 关心每个位置的取值、顺序不同视为不同结果:使用
product函数
内容的提问来源于stack exchange,提问作者Aidan Donnelly
相关产品推荐
相关产品推荐

