如何统计嵌套列表中各子列表的中间局部极大值数量?
解决嵌套列表的峰值元素统计问题
我来帮你搞定这个需求,咱们先理清楚问题,再一步步实现解决方案:
问题明确
我们需要处理一个数值型嵌套列表,对每个子列表,统计其中满足以下两个条件的元素数量:
- 元素同时存在左右相邻元素(也就是不能是子列表的首尾元素)
- 该元素大于它的左右两个邻居
比如给定输入[[1,2,3],[3,2,1],[3,1,2],[2,3,1]],输出就是[0,0,0,1]——前三个子列表要么没有中间元素,要么中间元素不满足大于左右的条件,只有第四个子列表里的3符合要求。
解决思路
- 遍历嵌套列表中的每一个子列表
- 对每个子列表,先判断长度:如果长度小于3,直接计数0(因为没有同时有左右邻居的元素)
- 对于长度≥3的子列表,只需要检查中间的元素(索引从1到
len(sublist)-2的位置) - 对每个中间元素,判断是否同时大于左边和右边的元素,满足则计数加1
- 把每个子列表的统计结果收集起来,组成最终的结果列表
代码实现(Python)
def count_peak_elements(nested_list): peak_counts = [] for sublist in nested_list: count = 0 # 子列表长度不足3,没有符合条件的元素 if len(sublist) < 3: peak_counts.append(count) continue # 遍历所有中间元素(排除首尾) for idx in range(1, len(sublist) - 1): current = sublist[idx] left_neighbor = sublist[idx - 1] right_neighbor = sublist[idx + 1] if current > left_neighbor and current > right_neighbor: count += 1 peak_counts.append(count) return peak_counts # 测试示例输入 sample_input = [[1,2,3],[3,2,1],[3,1,2],[2,3,1]] print(count_peak_elements(sample_input)) # 输出: [0, 0, 0, 1]
代码说明
- 函数
count_peak_elements接收嵌套列表作为输入,初始化空列表peak_counts来存储每个子列表的统计结果 - 逐个处理子列表:
- 若子列表长度小于3,直接添加0到结果列表
- 否则遍历中间的每个元素,对比当前元素和左右邻居,满足条件则计数递增
- 将当前子列表的计数添加到结果列表
- 最后返回完整的结果列表
内容的提问来源于stack exchange,提问作者Mahir Islam
相关产品推荐
相关产品推荐

