Python如何按相邻元素差值小于6规则过滤数组 避免索引越界
实现方案
问题排查
- 索引越界的核心原因是循环终止条件设置错误:当
i等于数组长度减1时,i+1已经超出数组的合法下标范围,访问A[i+1]自然报错 - 现有代码还存在两个问题:一是变量
i没有初始化,运行会报未定义错误;二是逻辑和需求不符,你当前是符合条件就保留A[i],但需求是保留符合条件的A[i+1]
方案1:基础循环修改版
修改循环范围,只遍历到数组的倒数第二个元素,完全避免越界问题:
A = [110, 109, 108, 115, 107, 115, 106, 105, 115, 115, 105] g = 6 # 第一个元素作为遍历起点默认保留 Au = [A[0]] # i最大取到len(A)-2,i+1刚好是数组最后一个下标,不会越界 for i in range(len(A) - 1): current = A[i] next_val = A[i+1] if (current - g) < next_val < (current + g): Au.append(next_val)
运行后得到的Au为[110, 109, 108, 107, 106, 105, 105],所有115都被移除,符合要求。
方案2:Pythonic简洁写法
用zip配对相邻元素,自动规避越界问题,代码更精简:
A = [110, 109, 108, 115, 107, 115, 106, 105, 115, 115, 105] g = 6 Au = [A[0]] + [b for a, b in zip(A, A[1:]) if (a - g < b < a + g)]
原理是zip(A, A[1:])会自动将数组的相邻元素两两配对,遍历次数自动等于数组长度减1,完全不需要手动处理下标边界。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

