如何使用Python计算数组所有长度≥2的元素组合及其对应总和
数学算法原理
你需要实现的功能本质是对输入数组做无重复全组合枚举(排除长度为0和1的无效组合):
- 若输入数组长度为n,符合要求的组合总数为
2ⁿ - n - 1:数组总子集数为2ⁿ,减去1个空集,再减去n个长度为1的单元素子集,剩余就是所有长度≥2的有效组合 - 组合满足不重复、顺序不敏感规则:例如
a+b和b+a属于同一个组合,仅输出一次
落地实现方案
Python标准库自带的itertools.combinations是官方实现的高效组合生成工具,天然适配任意长度的输入数组,实现步骤如下:
- 遍历组合长度k:取值范围从2到数组总长度
- 对每个k值,生成数组所有k元不重复组合
- 对每个组合分别处理:将元素转字符串后用
+拼接为组合表达式,同时对元素做数值求和 - 按要求格式输出结果表格
可直接运行的代码示例:
import itertools def calc_all_combination_sum(input_arr): result_list = [] arr_length = len(input_arr) # 遍历所有长度≥2的组合 for k in range(2, arr_length + 1): # 生成当前长度的所有不重复组合 for combo in itertools.combinations(input_arr, k): # 生成组合表达式 combination_expr = "+".join(map(str, combo)) # 计算组合求和结果 sum_result = sum(combo) result_list.append((combination_expr, sum_result)) # 输出符合要求的表格 print(f"| COMBINATION |{'SUM':>14} |") print(f"|-------------|{'-'*14}|") for expr, total in result_list: print(f"|{expr:<13}|{total:>14} |") return result_list # 测试用例 if __name__ == "__main__": # 可替换为任意长度的数值数组 test_array = [1, 2, 3, 4, 5] calc_all_combination_sum(test_array)
注意事项
- 当数组长度≤20时可正常全量生成输出,若数组长度超过25,总组合数会超过3000万,建议按需筛选组合后再输出,避免内存和性能过载
- 如果数组元素为非数值自定义类型,修改代码中的求和逻辑即可适配
内容的提问来源于stack exchange,提问作者WescoT
相关产品推荐
相关产品推荐

