繁体   English   中英

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

[英]why is rotating a list producing the identical values?

我正在切片列表:

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)

我得到的 output 是:[1,2,3] 和 [2,3,1]。

两个问题:

  1. 我不应该得到三个列表吗?-因为我正在做“for i in range(0,2)”; 为什么我只得到两个列表作为 output? 我不应该为 i=0、i=1 和 i=2 得到一个吗?

  2. 如果我将其更改为 'for i in range(0,len(nums)); output 是 [1,2,3],[2,3,1],[1,2,3] - 我同意前两个列表,但第三个不应该是 [3,2,1]? 因为我们每次都向左旋转 1。

对于您的第一个问题: range的第二个参数是排他性的。

对于您的第二个问题:它没有达到您的预期,因为您在每个循环中都更改了original_nums ,如您在此处看到的:

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

for i in range(0, len(nums)):
    print("original_nums is", original_nums, ", so original_nums[i:] + original_nums[:i] will result in", original_nums[i:] + original_nums[:i])
    original_nums = original_nums[i:] + original_nums[:i]  # here you change original_nums, so next time this will be changed
    print(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]
for i in range(0, len(nums)):
    print(nums[i:] + nums[:i])

它永远不会更改用于生成旋转的数组并打印

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM