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

  • 本文关键字:旋转 列表 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]。

两个问题:

  1. 我不应该得到三个列表吗?-因为我正在做";对于在(0,2("范围内的i;为什么我只得到两个列表作为输出?对于I=0,I=1和I=2,我不应该得到一个吗?

  2. 如果我将其更改为'for I in range(0,len(nums((;输出是[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]

最新更新