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

Python数字列表旋转代码异常:输出重复列表问题求助

问题分析与解决方案

嘿,我来帮你搞清楚这个问题的根源~

你遇到的问题是因为列表是可变对象,当你执行A.append(N)的时候,并没有把当前N的内容复制一份存到A里,而是把N这个列表的引用添加到了A中。也就是说,A里的所有元素其实都指向同一个列表对象。后续你对N做的pop(0)和append(y)操作,都是在修改这个同一个列表,所以最后打印A的时候,所有元素显示的都是这个列表最终的状态(也就是回到初始的[1,9,7])。

解决方案1:添加列表副本到结果中

修改你的函数,每次添加到A的时候,创建一个当前N的副本(而不是引用)。同时建议不要直接修改传入的原始列表,避免意外改变外部数据:

def rotation(N):
    A = []
    # 先复制一份传入的列表,避免修改原始参数
    temp_list = N.copy()
    for _ in range(len(N)):
        # 执行旋转操作
        first_element = temp_list.pop(0)
        temp_list.append(first_element)
        # 添加当前列表的副本到结果中
        A.append(temp_list.copy())
    return A

K = [1,9,7]
r = rotation(K)
print(r)  # 输出: [[1, 9, 7], [9, 7, 1], [7, 1, 9]]

解决方案2:用切片更简洁地实现旋转

其实可以不用pop和append,直接通过列表切片来生成旋转结果,这种方式更简洁,而且天然生成新列表,不会有引用问题:

def rotation(N):
    # 循环len(N)次,每次生成一个旋转后的新列表
    return [N[i:] + N[:i] for i in range(len(N))]

K = [1,9,7]
r = rotation(K)
print(r)  # 输出: [[1, 9, 7], [9, 7, 1], [7, 1, 9]]

这里的逻辑是:N[i:]取从索引i到末尾的子列表,N[:i]取从开头到索引i的子列表,两者拼接起来就是一次左旋转后的结果,循环所有可能的起始索引,就能得到所有旋转情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:38:46