如何实现列表按三角形相邻累加至单值的通用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
相关产品推荐
相关产品推荐

