为什么旋转列表会产生相同的值?
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)
我得到的输出是:[1,2,3] 和 [2,3,1]。
两个问题:
我不应该得到三个列表吗?- 因为我在做“for i in range(0,2)”;为什么我只得到两个列表作为输出?我不应该为 i=0、i=1 和 i=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]
我正在对列表进行切片:
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]。
两个问题:
我不应该得到三个列表吗?- 因为我在做“for i in range(0,2)”;为什么我只得到两个列表作为输出?我不应该为 i=0、i=1 和 i=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]