Python实现列表顺时针循环旋转时出现IndexError问题求助
数组顺时针旋转代码报错原因及修复方案
报错根本原因梳理
- 空列表不支持直接索引赋值,触发IndexError
Python 中未预先填充元素的空列表没有任何可用索引位,哪怕你计算出的i+k、i+k-N的取值范围在0~N-1之间,对长度为0的Arr2执行索引赋值操作也会直接抛出索引越界错误。修复方式为初始化Arr2时就指定和原数组相同的长度,示例:Arr2 = [0]*N。 - if分支的else缩进错误,逻辑完全不符合预期
你当前代码里的else和for循环同级,属于Python特有的for-else语法(for循环正常执行完未触发break就会执行else内代码),不是你想要的if条件不成立时的分支。需要将else缩进调整到和if同级,才能正确对应判断逻辑。 - 变量名大小写不匹配,会触发NameError
你定义的循环变量是小写的i,但取值时用了大写的Arr[I],Python大小写敏感,解决索引报错后运行到这一行会直接抛出变量未定义错误,统一改成小写i即可。 - (可选优化)输入的数组元素默认是字符串类型,直接输出会带引号不符合预期,可以在append时转成int类型:
Arr.append(int(a))。
修正后的可运行代码
Arr = [] N = int(input("Enter the number of elements:")) k = int(input()) if k > N: k = k % N # 初始化等长的结果数组 Arr2 = [0] * N for i in range(0, N): a = input() Arr.append(int(a)) for i in range(0, N): if (i + k) < N: Arr2[i + k] = Arr[i] else: Arr2[i + k - N] = Arr[i] # 按空格分隔输出符合示例要求 print(' '.join(map(str, Arr2)))
验证效果
输入N=5,K=2,数组元素依次输入10、20、30、40、50时,输出为40 50 10 20 30,完全符合预期。
内容的提问来源于stack exchange,提问作者Rudra
相关产品推荐
相关产品推荐

