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

Python如何不使用sum()函数计算列表所有非空子集的元素和

实现代码(按要求的组合长度顺序计算,不使用sum())
from itertools import combinations

# 示例输入列表
my_list = [1, 2, 3, 4, 5, 6]
total = 0
list_len = len(my_list)

# 从二元组合开始遍历,直到等于列表长度的组合
for k in range(2, list_len + 1):
    # 生成所有长度为k的不重复元素组合
    for current_combo in combinations(my_list, k):
        # 手动累加计算当前组合的和,不调用内置sum()
        combo_sum = 0
        for num in current_combo:
            combo_sum += num
        total += combo_sum

print("所有符合要求的子集和总和为", total)
代码说明
  • 遍历逻辑完全符合要求的计算顺序:先算所有二元组和,再依次算三元、四元直到列表长度的组合和
  • 组合生成使用标准库itertools.combinations,保证不会生成重复的元素组合
  • 目前未纳入单元素子集计算,如果需要包含单元素,只需将range(2, list_len + 1)修改为range(1, list_len + 1)即可
优化方案(适合长列表,避免组合爆炸)

如果你的列表长度较大,枚举所有组合会导致性能急剧下降,可以直接用数学推导计算结果:
每个元素在所有长度≥2的子集中的出现次数为 2^(列表长度-1) - 1,因此总总和 = 所有元素累加值 * (2^(列表长度-1) - 1)
以示例列表计算:
列表元素和为 1+2+3+4+5+6 = 21,列表长度为6,因此总总和 = 21 * (2^5 -1) = 21 * 31 = 651,和暴力枚举结果完全一致。


内容的提问来源于stack exchange,提问作者Karafakeu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:24:07