You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python计算数组所有长度≥2的元素组合及其对应总和

数学算法原理

你需要实现的功能本质是对输入数组做无重复全组合枚举(排除长度为0和1的无效组合):

  • 若输入数组长度为n,符合要求的组合总数为 2ⁿ - n - 1:数组总子集数为2ⁿ,减去1个空集,再减去n个长度为1的单元素子集,剩余就是所有长度≥2的有效组合
  • 组合满足不重复、顺序不敏感规则:例如a+b和b+a属于同一个组合,仅输出一次
落地实现方案

Python标准库自带的itertools.combinations是官方实现的高效组合生成工具,天然适配任意长度的输入数组,实现步骤如下:

  1. 遍历组合长度k:取值范围从2到数组总长度
  2. 对每个k值,生成数组所有k元不重复组合
  3. 对每个组合分别处理:将元素转字符串后用+拼接为组合表达式,同时对元素做数值求和
  4. 按要求格式输出结果表格

可直接运行的代码示例:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:27:04