如何生成数组的所有组合并计算组合内元素除以组合总和的结果
代码问题修复
原有代码核心问题
- 生成组合时遍历长度从1开始,不符合要求的「长度≥2」的条件
- 计算分母时错误取两个元素的和作为分母,没有统计当前组合所有元素的总和
- 存在大量无效逻辑:比如乘积计算的循环完全没有用到,嵌套的j、k遍历逻辑只能处理长度为2的组合,无法适配更长的组合
修复后的代码
from itertools import combinations n = int(input("Enter The Amount of Numbers in the List: ")) num_list = [] for _ in range(n): x = float(input("Enter the numbers: ")) num_list.append(x) result = [] # 只生成长度≥2的组合 for comb_len in range(2, len(num_list)+1): # 遍历所有指定长度的组合 for comb in combinations(num_list, comb_len): # 计算当前组合的总和 sum_comb = sum(comb) # 遍历组合内每个元素,计算占比后加入结果 for num in comb: result.append(num / sum_comb) print(result)
代码逻辑说明
- 直接从长度2开始生成组合,不用后续再做列表截断操作
- 对每个生成的组合先计算全部元素的总和作为分母
- 遍历组合内的每个元素,直接用元素值除以组合总和得到对应结果,不需要嵌套多层循环
示例运行验证
输入数组[1,2,3]时,输出结果为:[0.3333333333333333, 0.6666666666666666, 0.25, 0.75, 0.4, 0.6, 0.16666666666666666, 0.3333333333333333, 0.5]
对应4个组合的计算结果,和需求完全匹配。
内容的提问来源于stack exchange,提问作者Waffle05
相关产品推荐
相关产品推荐

