Python列表元素特殊求和:首尾元素无前后驱的处理实现
列表元素与前后索引元素求和的实现方案
需求说明
遍历列表中的每个元素,将其与前一个索引、后一个索引的元素值求和,结果存入空列表。特殊规则:
- 索引0无前驱,仅将自身与索引1的值求和
- 最后一个索引无后继,仅将自身与前一个索引的值求和
原代码问题分析
你提供的示例代码存在索引逻辑错误:
- 当
i=0时,vec[i-1]会取列表最后一个元素(Python允许负索引),不符合需求 - 当
i为最后一个索引时,vec[i+1]会触发IndexError索引越界异常
原示例代码:
vec = [1,2,3,4,5] newVec = [] for i in range(len(vec)): newValue = vec[i] + vec[i+1] + vec[i-1] # if i + 1 or i - 1 does now exist pass newVec.append(newValue)
修正后的实现代码
以下是符合需求的代码实现:
vec = [1, 2, 3, 4, 5] newVec = [] n = len(vec) for i in range(n): if i == 0: # 第一个元素,仅加自身和下一个元素 total = vec[i] + vec[i+1] elif i == n - 1: # 最后一个元素,仅加自身和前一个元素 total = vec[i] + vec[i-1] else: # 中间元素,加自身、前一个、后一个元素 total = vec[i] + vec[i-1] + vec[i+1] newVec.append(total) print(newVec) # 输出: [3, 6, 9, 12, 9]
代码逻辑解释
- 先获取列表长度
n,方便快速判断首尾索引 - 遍历每个索引
i,根据位置执行不同求和逻辑:- 首索引仅计算当前元素与下一个元素的和
- 尾索引仅计算当前元素与前一个元素的和
- 中间索引计算当前元素与前后元素的总和
- 将每次计算的结果添加到
newVec中,最终得到符合预期的结果
内容的提问来源于stack exchange,提问作者ZedORYasuo
相关产品推荐
相关产品推荐

