如何筛选f_list中与前后相邻元素差值均大于g的元素?
筛选列表符合相邻差值要求元素的实现方案
原代码问题梳理
- 三重循环逻辑错误,会导致元素重复添加,时间复杂度高达O(n^3)
- 相邻差值计算逻辑错误,索引为0时取
i-1会错误获取列表末尾元素 - 判断条件不符合需求,错误判断
x>g而非相邻差值大于g,同时存在newlist和new_list变量名不一致的笔误 - 没有排除首尾无相邻元素的边界情况
正确实现代码
def func(f_list, g): new_list = [] # 首尾元素没有前后两个相邻元素,直接跳过,遍历范围为索引1到len(f_list)-2 for i in range(1, len(f_list) - 1): # 计算当前元素与前后相邻元素的绝对差值 prev_diff = abs(f_list[i] - f_list[i-1]) next_diff = abs(f_list[i] - f_list[i+1]) if prev_diff > g and next_diff > g: new_list.append(f_list[i]) return new_list
使用说明
- 单次遍历即可完成筛选,时间复杂度为O(n),列表长度小于3时直接返回空列表
- 上述代码默认计算绝对差值,如果你需要的是有向差值(比如要求当前元素比前一个大g以上、同时比后一个也大g以上),去掉
abs()即可:prev_diff = f_list[i] - f_list[i-1] next_diff = f_list[i] - f_list[i+1]
测试示例
f_list = [1, 5, 3, 10, 2] g = 3 print(func(f_list, g)) # 输出:[10],10和前一个元素3差7>3,和后一个元素2差8>3,符合要求
内容的提问来源于stack exchange,提问作者yasra
相关产品推荐
相关产品推荐

