我有一個要按升序排序的數字陣列。
def sort(array)。
n = len(array)
for outer_iteration in range(1, n) 。
for inner_iteration in range(1, n) 。
number1 = array[inner_iteration - 1]
number2 = array[inner_iteration]
if number1 > number2:
array[inner_iteration - 1] , array[inner_iteration] = array[inner_iteration] , array[inner_iteration - 1]
array = [10,47,1, 0,-39,-5]
sort(array)
print(array)
這樣做完全沒有問題。但是當我改變交換元素位置的元組時,陣列就不再被排序了。
def sort(array)。
n = len(array)
for outer_iteration in range(1, n) 。
for inner_iteration in range(1, n) 。
number1 = array[inner_iteration - 1]
number2 = array[inner_iteration]
if number1 > number2:
number1 , number2 = number2, number1
array = [10,47,1, 0,-39,-5]
sort(array)
print(array)
我在PythonTutor上檢查了一下,在我看來,在第二塊代碼中,分配給number1和number2的數字確實是互換的,但只是在變數中,而不是在陣列里。
我在兩種情況下都使用了圖元來交換,既然number1和number2被分配到array[inner_iteration - 1]和array[inner_iteration],為什么第二種情況的表現與第一種情況不同?
uj5u.com熱心網友回復:
所以在第二個代碼片段中,你只是將變數number1和number2改變為一些新的值(在你的例子中你只是交換了這些值)。但是這些值并不是對陣列中這些位置的數字的參考,這意味著這個變化并沒有反映在陣列中。要更新陣列中的值,你需要在變數被改變后將數字重新分配到陣列中。
def sort(array)。
n = len(array)
for outer_iteration in range(1, n) 。
for inner_iteration in range(1, n) 。
number1 = array[inner_iteration - 1]
number2 = array[inner_iteration]
if number1 > number2:
number1 , number2 = number2, number1
array[inner_iteration - 1] = number1
array[inner_iteration] = number2
array = [10,47,1, 0,-39,-5]
sort(array)
print(array)
上述修正后的代碼將幫助你理解其中的道理。
uj5u.com熱心網友回復:
看一下一個簡單的例子:
a = 5。
b = a
b = 3
print(a) # prints 5.
在這種情況下,b = a并不意味著b總是等于a。如果你較早地將b重新賦值,a將保持其第一個值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/306931.html
標籤:
上一篇:如何從mongoose的'$in'運算子中獲得所有匹配的值
下一篇:如何從陣列中洗掉元素
