本文介绍如何遍历数字列表,识别数值下降的位置(即“断点”,如从3→1、4→1等),提取每个断点前的较大值(即局部峰值),并补充列表末尾元素,最终构造出目标结果列表。
在处理序列数据时,常需识别“模式重置点”——例如本例中,每当数值从高位骤降至1(如 3→1、4→1、5→1),往往标志着一个子序列的结束与新序列的开始。此时,前一子序列的最后一个数(即下降前的峰值)即为关键“断点值”。我们的目标是:捕获所有严格下降位置的前一个元素,并追加整个列表的末尾元素。
Python 3.10+ 提供了 itertools.pairwise 这一简洁高效的工具,可将列表转换为连续相邻元素对 (a, b),从而直接比较 a > b 判断是否发生下降:
from itertools import pairwise my_list = [1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 7, 8] # 提取所有 a > b 的 a(即每个下降点前的峰值) break_points = [a for (a, b) in pairwise(my_list) if a > b] # 补充末尾元素(确保包含最后一个子序列的终点) break_points.append(my_list[-1]) print(break_points) # 输出: [3, 4, 5, 8]
✅ 关键说明:
该方法简洁、可读性强,且无需手动索引或状态跟踪,是处理此类序列边界识别问题的推荐实践。