嘿伙計們,這是一個基本問題,希望能直截了當。
基本上試圖理解為什么為快速排序實作進行多變數賦值是有效的,如下所示:
if a_list[i] > a_list[i 1]:
a_list[i], a_list[i 1] = a_list[i 1], a_list[i]
但不是逐行執行,如下所示:
if a_list[i] > a_list[i 1]:
a_list[i] = a_list[i 1]
a_list[i 1] = a_list[i]
如果有幫助,這里是完整的代碼:
def bubble_sort(a_list):
last_ind = len(a_list) - 1
flag = True
while flag:
flag = False
for i in range(0, last_ind):
if a_list[i] > a_list[i 1]:
a_list[i], a_list[i 1] = a_list[i 1], a_list[i]
flag = True
return a_list
a_list = [5,8,2,1]
print(bubble_sort(a_list))
提前致謝。
uj5u.com熱心網友回復:
在第一個實作中,python 在后臺會創建一個元組來存盤兩個變數的值,然后更改變數的值。
在a_list[i]更改了的值后的第二個實作中,之前的值丟失了,因此沒有辦法設定a_list[i 1]為正確的值。
uj5u.com熱心網友回復:
說a, b= 1, 2。本質上,它執行元組解包,以便左側(元組)的值被分配右側(元組)相應元素的值。
所以例如上面的考試意味著(a, b) = (1, 2) 這反過來意味著a=1和b=2
現在假設a=5'b=10'
a = 5
b = 10
# Right method
a, b = b, a # same as saying (a, b) = (10, 5) and thus assigning a = 10 and b = 5
# Wrong method
a = b # a is now assigned 10
b = a # a is 10 from the previous line, and b is now assigned 10
我不會說第一種方法是即時的,第二種方法是手動的,而是說它們做兩種不同的事情。其中一個是將一組值(碰巧存盤在變數中)解包到一組變數中,而另一個是我猜錯誤的變數賦值。
使第二種方法起作用的一種方法是
c = a # new variable stores value of a
a = b # a is reassigned to the value of b
b = c # b is now reassigned to the original value of a (which was previously stored in c)
uj5u.com熱心網友回復:
這個例子
a_list[i] = a_list[i 1]
a_list[i 1] = a_list[i]
將修改 index iin處的值a_list,然后將 indexi 1設定為該修改后的值。您可以將多重賦值語法視為 Python 同時執行兩個賦值,因此一個賦值不會影響另一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369672.html
上一篇:如何從另一個整數修改一個整數的位
下一篇:ffmpeg顏色校正演算法
