簡體   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