Python实现列表首尾元素累加迭代至剩余单元素的方法咨询
列表首尾逐次配对求和的实现方案
代码实现完全匹配你给出的执行示例,没有冗余逻辑,两种写法都适配新手的理解难度。
核心逻辑对齐
先把规则拆解成可落地的步骤,避免一开始理解错流程:
- 终止条件:只要当前待处理列表长度大于1,就持续执行操作
- 每一轮操作流程:
- 对当前列表,反复取出第一个元素和最后一个元素计算和值,取出的同时把这两个元素从原列表移除
- 把每次算出的和值存入新列表,作为下一轮的处理对象
- 当列表长度为奇数时,配对到最后会剩余一个无搭档的中间元素,这个元素不能丢弃,要原封不动加入新列表
流程模拟版代码(和你描述的操作逻辑完全一一对应)
current_list = [5,4,3,2,1,6] while len(current_list) > 1: next_round = [] # 重复配对首尾直到列表长度不足2 while len(current_list) > 1: head = current_list.pop(0) tail = current_list.pop() next_round.append(head + tail) # 处理奇数长度剩下的单个元素 if current_list: next_round.append(current_list.pop()) current_list = next_round print(current_list)
运行输出和示例完全一致:
[11, 5, 5] [16, 5] [21]
双指针优化版(规避列表删除的索引错位问题)
pop(0)操作会移动列表内所有后续元素,列表长度较大时效率偏低,换成双指针遍历的写法更稳妥,也不用反复修改原列表:
current_list = [5,4,3,2,1,6] while len(current_list) > 1: left = 0 right = len(current_list) - 1 next_round = [] # 左右指针未相遇时持续配对 while left < right: next_round.append(current_list[left] + current_list[right]) left += 1 right -= 1 # 指针相遇时,对应中间剩余的单独元素 if left == right: next_round.append(current_list[left]) current_list = next_round print(current_list)
新手常踩的错因
- 边遍历原列表边按索引删元素:列表长度随删除操作动态变化,会导致索引移位,取到错误位置的元素,这是绝大多数实现失败的原因
- 遗漏奇数长度列表的中间剩余元素:没有单独补这部分的话,遇到奇数长度的列表会丢失数据,最终结果和示例对不上
内容的提问来源于stack exchange,提问作者Phyo Wai Yan
相关产品推荐
相关产品推荐

