Python 为什么旋转列表会产生相同的值?

Python 为什么旋转列表会产生相同的值?,python,slice,Python,Slice,我正在切割一个列表: nums = [1,2,3] original_nums = nums for i in range(0,len(nums)-1): original_nums = original_nums[i:] + original_nums[:i] print(original_nums) 我得到的输出是:[1,2,3]和[2,3,1] 两个问题: 我不应该得到三个列表吗?-因为我在做“范围(0,2)内的I”;为什么我只得到两个列表作为输出?我不应该为I=0、I

我正在切割一个列表:

nums = [1,2,3]
original_nums = nums

for i in range(0,len(nums)-1):
    original_nums = original_nums[i:] + original_nums[:i]
    print(original_nums)
我得到的输出是:[1,2,3]和[2,3,1]

两个问题:

  • 我不应该得到三个列表吗?-因为我在做“范围(0,2)内的I”;为什么我只得到两个列表作为输出?我不应该为I=0、I=1和I=2得到一个吗

  • 如果我将其更改为“对于范围(0,len(nums))中的I”;输出是[1,2,3],[2,3,1],[1,2,3]-我同意前两个列表,但第三个列表不应该是[3,2,1]?因为我们每次向左旋转1


  • 对于第一个问题:
    range
    的第二个参数是exlusive

    关于你的第二个问题:它没有达到你期望的效果,因为你在每个循环中都改变了
    original\u nums
    ,你可以在这里看到:

    nums=[1,2,3]
    原始值=nums
    对于范围(0,len(nums))内的i:
    打印(“原件为”,原件为,”,因此原件[i::+原件[:i]将导致“,原件[i::+原件[:i]))
    original_nums=original_nums[i::+original_nums[:i]#这里您更改了original_nums,所以下次将更改此项
    打印(原件)
    
    印刷品

    original_nums is [1, 2, 3] , so original_nums[i:] + original_nums[:i] will result in [1, 2, 3]
    [1, 2, 3]
    original_nums is [1, 2, 3] , so original_nums[i:] + original_nums[:i] will result in [2, 3, 1]
    [2, 3, 1]
    original_nums is [2, 3, 1] , so original_nums[i:] + original_nums[:i] will result in [1, 2, 3]
    [1, 2, 3]
    
    正如您在第三个循环中所看到的,存在用于旋转的“意外”数组
    [2,3,1]
    ,因此您会得到意外的结果

    如果将其更改为以下内容:

    nums=[1,2,3]
    对于范围(0,len(nums))内的i:
    打印(nums[i::+nums[:i])
    
    它从不更改用于生成漫游的数组并打印

    [1, 2, 3]
    [2, 3, 1]
    [3, 1, 2]
    

    range
    的第二个参数是独占的<代码>范围(0,2)是
    [0,1]
    原始值[3:]
    是空列表
    []
    ,因为索引3已经超出了作为起始索引的范围。
    原始值=num
    没有任何用途;你不是在复制名单。谢谢,迈克尔,这很有道理。第二部分的快速问题-为什么您的代码与我的不同?我以为他们做了同样的事情?我更新了答案,希望能让它更清楚:)