簡體   English   中英

迭代地交換Python中的元素

[英]Swapping Elements in Python Iteratively

我無法理解這個簡單的代碼片段幕后發生的事情:

def changeArray(arr):
     for i in range(len(arr)):
         arr[i], arr[arr[i] - 1] = arr[arr[i] - 1], arr[i]
         print(arr)
     return(arr)

該代碼假定數組的元素為1到n的整數。 輸入為[1,3,4,2]時給定代碼的輸出為:

[1, 3, 4, 2]
[1, 4, 4, 3]
[1, 4, 4, 3]
[1, 4, 4, 3]
Out[8]: [1, 4, 4, 3]

雖然我期待它打印並返回:

[1, 3, 4, 2]
[1, 4, 3, 2]
[1, 4, 3, 2]
[1, 2, 3, 4]
Out[8]: [1, 2, 3, 4]

當代碼只交換元素時,為什么值會發生變化?


編輯:

事實證明,更改交換順序可以解決問題:

def changeArray(arr):
     for i in range(len(arr)):
         arr[arr[i]-1], arr[i] = arr[i], arr[arr[i]-1]
         print(arr)
     return(arr)

這給出了以下輸出:

[1, 3, 4, 2]
[1, 4, 3, 2]
[1, 4, 3, 2]
[1, 2, 3, 4]
Out[8]: [1, 2, 3, 4]

改變訂單是如何按預期進行交換的,反過來又完成了其他事情?

通常,您不應該使用正在變異的對象來指定要替換的目標位置,否則會非常混亂。

當你寫這個:

 arr[i], arr[arr[i] - 1] = arr[arr[i] - 1], arr[i]

它大致相當於:

tup = arr[arr[i] - 1], arr[i]
x, y = tup
arr.__setitem__(i, x)
arr.__setitem__(arr[i] - 1, y)

(有關如何翻譯這些內容的詳細信息,請參閱參考文檔 ,但希望最直接的想法更簡單。)

哪個應該明確為什么你得到你的結果。 以及為什么以下所有做你想做的事情:

x = arr[i] - 1
arr[i], arr[x] = arr[x], arr[i]

arr[arr[i] - 1], arr[i] = arr[i], arr[arr[i] - 1]

def swap(x, y):
    arr[x], arr[y] = arr[y], arr[x]
swap(i, arr[i] - 1)

我認為第一個是最簡單的(第二個看起來很簡單,但只是誤導性的)。

將表達式更改為

 arr[arr[i] - 1], arr[i] = arr[i], arr[arr[i] - 1]

正在為我工​​作。 仍然不知道價值觀如何或為何變化。 我是python的新手,也很抱歉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM