Python如何按相邻元素差值条件移除列表右侧元素
错误原因
- 代码第二行错误将原始输入列表
a直接覆盖赋值为预期结果列表,没有基于原始输入做处理,即便后续逻辑正确也无法得到正确执行结果。 - 核心逻辑错误为遍历列表的同时对列表执行删除操作:
zip(a, a[1:])会在遍历启动前基于当时的列表长度生成固定的元素配对,你删除元素后列表长度变短,原有遍历索引和实际列表元素完全错位,会跳过部分相邻元素的差值校验,最终导致非预期的删除结果。
正确实现方案
不要直接修改原列表,改为新建结果列表存储符合要求的元素,规避索引错位问题。逻辑为:先将列表第一个元素加入结果,之后从第二个元素开始遍历原列表,每次拿当前元素和结果列表最后一个元素做差值判断,差值大于0.2就将当前元素加入结果,否则跳过当前元素(即满足要求时移除靠右的元素)。
示例代码如下:
a = [183.4, 183.3, 182.1, 182.75] # 处理空列表边界情况 if not a: res = [] else: res = [a[0]] for num in a[1:]: if abs(num - res[-1]) > 0.2: res.append(num) print(res)
执行输出为[183.4, 182.1, 182.75],符合预期。
内容的提问来源于stack exchange,提问作者user16920669
相关产品推荐
相关产品推荐

