Python实现数组分割移首段到末尾时出现IndexError错误如何解决
问题排查与修复
错误根因
- 越界错误出现在
splitArr函数的内层循环逻辑:你设置内层循环的范围是range(0, n),当j遍历到最大值n-1时,arr[j + 1]实际访问的是arr[n],但长度为n的列表合法下标范围是0 ~ n-1,访问下标n直接触发越界报错。
修复方案
方案1:适配原有实现思路修改
仅需要调整内层循环的遍历上限为n-1,保证j+1最大为n-1即可:
def splitArr(arr, n, k): for i in range(0, k): x = arr[0] # 调整循环范围,j最大取到n-2,j+1最大为n-1不会越界 for j in range(0, n-1): arr[j] = arr[j + 1] arr[n-1] = x arr = [12, 10, 5, 6, 52, 36] n = len(arr) position = 1 splitArr(arr, n, position) for i in range(0, n): print(arr[i])
运行后输出结果为:
10 5 6 52 36 12
方案2:Python原生切片优化(更简洁高效)
不需要嵌套循环,用列表切片拼接可以直接实现需求,代码复杂度更低,运行效率更高:
def splitArr(arr, n, k): # 直接把前k个元素切下来拼到数组末尾即可 arr[:] = arr[k:] + arr[:k] arr = [12, 10, 5, 6, 52, 36] n = len(arr) position = 1 splitArr(arr, n, position) for i in range(0, n): print(arr[i])
运行结果和方案1完全一致。
内容的提问来源于stack exchange,提问作者Tanishk Gupta
相关产品推荐
相关产品推荐

