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

Python3数组左旋转代码异常,求错误原因及修复方案

嘿,我来帮你排查下这个数组左旋转的问题~

核心问题分析

你的代码里最关键的bug出在这一行:

b = a

在Python中,列表是可变对象,这个赋值操作并不会创建一个新的列表副本,而是让变量b和a指向同一个内存地址的列表。也就是说,你后续修改b的元素时,其实是在直接修改原列表a的内容。

举个具体的例子:第一次循环i=0时,你把a[0](也就是12)赋值给b的某个位置,但因为b和a是同一个列表,这就相当于把a的对应位置改成了12。等到循环到i=1、i=2的时候,a[i]已经被之前的操作改成12了,最后整个列表自然就全被12填满了。

修复方案

我给你两种实用的修复思路,任选其一都能解决问题:

方法1:创建独立的新列表

不要直接赋值b = a,而是创建一个和原列表长度相同的新列表,这样修改b就不会影响原列表a了:

def rotLeft(a, d):
    lengthOfArray = len(a)
    shift = d
    # 创建一个与原列表长度一致的新列表,后续会覆盖初始值
    b = [0] * lengthOfArray
    for i in range(lengthOfArray):
        newLocation = (i + (lengthOfArray - shift)) % lengthOfArray
        b[newLocation] = a[i]
    return b

方法2:利用Python切片特性(更简洁高效)

Python的列表切片可以非常优雅地实现左旋转逻辑,完全不需要手动写循环:

def rotLeft(a, d):
    # 先处理旋转次数大于数组长度的情况,避免多余操作
    shift = d % len(a)
    # 左旋转d次 = 把前d个元素移到列表末尾
    return a[shift:] + a[:shift]

比如你的测试用例,数组是[12,76,1,9,13],d=4的话,a[4:]取到[13],a[:4]取到[12,76,1,9],拼接后就是[13,12,76,1,9],这正是左旋转4次的正确结果。

测试验证

用你提供的输入测试(注意输入里的09应该写成9,因为Python整数不支持前导零):

输入:5 4 12 76 1 9 13

运行修复后的代码,输出会是[13, 12, 76, 1, 9],完全符合预期。

内容的提问来源于stack exchange,提问作者Ajay Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:27:23