You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python数组旋转代码运行异常 迭代后元素全为7的问题排查

数组旋转代码运行异常问题定位

问题复现

使用测试输入3 6 8 7运行原代码,预期三次右旋转输出为7 3 6 8、8 7 3 6、6 8 7 3,实际仅第一次输出符合预期,后续输出均为全7列表。
原代码如下:

def solution(A):
    A_inp = A
    roated_a =list(range(len(A_inp)))
    
    k=1
    while k < 3:
        for i in range(len(A_inp)-1):
            
            roated_a[i+1] = A_inp[i]
            roated_a[0] = A_inp[len(A_inp)-1]
            
        A_inp = roated_a
        k+=1
        print(roated_a)
        

inp_arr = [int(item) for item in input("Enter the list items : ").split()]
solution(inp_arr)

错误根因

代码共有3处核心问题,共同导致了全7的异常输出:

  • 列表引用赋值导致数据源污染:Python中列表是可变对象,直接使用=赋值不会生成新列表,仅会给同一块内存地址的列表新增一个引用变量。第一次循环结束后执行A_inp = roated_a,两个变量指向完全相同的列表对象。第二轮循环遍历过程中修改roated_a元素时,会同步改动A_inp存储的源数据,遍历到后续索引时读取到的已经是被篡改后的值,而非原始旋转前的数组元素。
  • 结果列表未按轮次重置:roated_a仅在函数入口初始化一次,第二轮、第三轮旋转时直接复用已经存了上一轮结果的列表,旧值残留会干扰新结果生成。
  • 0号位赋值位置错误:每轮右旋转仅需要给结果列表的0号位赋值1次(即旋转前数组的最后一个元素),原代码将这行逻辑写在for循环内部,每遍历一个元素就重复覆盖0号位。第二轮循环最后一步遍历到末尾时,数组末尾元素已经被篡改成为7,0号位也会被覆盖为7,最终得到全7列表。

修复后代码

针对以上问题调整后,代码可正常输出预期结果:

def solution(A):
    current_arr = A.copy()
    k = 1
    # 共需要输出3次旋转结果,循环执行3轮
    while k <= 3:
        arr_len = len(current_arr)
        # 每轮旋转新建独立的结果列表,避免旧值残留和引用干扰
        rotated_a = [0] * arr_len
        # 0号位赋值仅需每轮执行1次,移到循环外
        rotated_a[0] = current_arr[-1]
        for i in range(arr_len - 1):
            rotated_a[i+1] = current_arr[i]
        # 拷贝当前轮结果作为下一轮的输入数组,避免引用关联
        current_arr = rotated_a.copy()
        print(rotated_a)
        k += 1

inp_arr = [int(item) for item in input("Enter the list items : ").split()]
solution(inp_arr)

运行测试输入3 6 8 7,输出如下,完全符合预期:

[7, 3, 6, 8]
[8, 7, 3, 6]
[6, 8, 7, 3]

内容的提问来源于stack exchange,提问作者DEBASHIS BAIDYA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:45:38