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

Python如何实现列表元素可放回抽取N个的所有组合求和?

代码实现

标准库版本(推荐)

直接使用Python内置itertools模块的combinations_with_replacement方法,原生满足「有放回抽取、不计顺序」的组合生成要求:

import itertools

def fun(L, N):
    comb_list = itertools.combinations_with_replacement(L, N)
    sum_list = [sum(comb) for comb in comb_list]
    return sum_list

测试验证

L = [1, 2, 4]
N = 2
print(fun(L, N)) 
# 输出:[2, 3, 4, 5, 6],和预期结果完全匹配

无依赖自定义版本

如果不想引入内置库依赖,可以通过递归深度优先搜索自行实现组合生成逻辑:

def fun(L, N):
    sorted_L = sorted(L)
    sum_list = []
    
    def dfs(start_idx, current_comb):
        if len(current_comb) == N:
            sum_list.append(sum(current_comb))
            return
        for i in range(start_idx, len(sorted_L)):
            dfs(i, current_comb + [sorted_L[i]])
    
    dfs(0, [])
    return sum_list

实现逻辑说明:先对输入列表排序,每次选取元素仅从当前下标及之后的位置取,避免生成[2,1]这类和[1,2]元素重复的组合,凑够N个元素就直接求和存入结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:39:01