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

如何实现列表按三角形相邻累加至单值的通用Python解法

问题分析与解法

你现有代码存在的问题如下:

  • 缩进逻辑混乱,输入阶段和求和阶段的缩进不符合Python语法要求
  • 求和逻辑错误:代码中sum=i+i+1是对下标做加法,没有读取列表中对应位置的元素值
  • 仅执行了一次相邻求和操作,没有循环迭代到列表只剩1个元素,因此无法适配任意长度的输入

通用解法1:直观模拟法

完全按照题目描述的规则迭代计算,逻辑清晰易理解,适配任意长度的输入列表:

# 输入部分
lst = []
n = int(input())
for i in range(n):
    num = int(input())
    lst.append(num)

# 核心迭代计算
current = lst.copy()
while len(current) > 1:
    next_level = []
    # 相邻元素相加生成下一层列表
    for i in range(len(current) - 1):
        next_level.append(current[i] + current[i+1])
    current = next_level

# 输出最终结果
print(current[0])

逻辑说明

每次循环都会将当前列表的相邻元素求和生成新列表,替换原有列表,直到列表长度为1,此时的唯一元素就是要求的结果。

通用解法2:组合数优化法

根据杨辉三角的数学性质,长度为m的列表,最终结果等于每个元素乘以杨辉三角第m-1行对应位置的组合数之后的总和,不需要逐层迭代,计算效率更高:

import math

lst = []
n = int(input())
for i in range(n):
    num = int(input())
    lst.append(num)

res = 0
m = len(lst) - 1
for idx, num in enumerate(lst):
    # 计算组合数 C(m, idx) 作为系数
    coeff = math.comb(m, idx)
    res += num * coeff

print(res)

逻辑说明

比如长度为4的列表,对应杨辉三角第3行的系数是[1,3,3,1],最终结果就是lst[0]*1 + lst[1]*3 + lst[2]*3 + lst[3]*1,和逐层相加的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:15:01