[英]Why doesn't this sorting method work in Python?
我有這段代碼可以對列表進行排序,而無需在python中使用sorted函數。 輸出與預期相反(從最大到最小而不是從最小到最大)
將<更改為>似乎有幫助,但是我不確定為什么會這樣
lista=[2,1,5,1,3,6]
for i in range(len(lista)):
for l in range(len(lista)):
if i==l:
continue
if lista[l]<lista[i]:
temp=lista[i]
lista[i]=lista[l]
lista[l]=temp
print(lista)
預期輸出列表,該列表將變小到最大,但是得到相反的結果,除非我將<符號更改為>符號,但是我不確定為什么會這樣?
嘗試在紙上寫算法的每個迭代:
i = 0: 2 1 5 1 3 6
i = 1: 1 2 5 1 3 6
i = 2: 2 1 5 1 3 6
您的問題是for l in range(len(lista)):
的內部循環for l in range(len(lista)):
每次從0開始,但是您必須從位置i開始。 當您完成內部循環時,將i遞增1,然后對i進行排序之前的所有內容。 如果這種情況下內部循環從頭開始重新啟動,則您將獲得1小於2(在i = 1上),請再次交換它。
lista=[2,1,5,1,3,6]
for i in range(len(lista)):
for l in range(i, len(lista)):
if i==l:
continue
if lista[l]<lista[i]:
temp=lista[i]
lista[i]=lista[l]
lista[l]=temp
問題是第二個循環再次遍歷整個列表。 您要做的是改為查看其余元素:
lista = [2, 1, 5, 1, 3, 6]
for i in range(len(lista)):
# change range to start at i
for l in range(i, len(lista)):
if i == l:
continue
if lista[l] < lista[i]:
temp = lista[i]
lista[i] = lista[l]
lista[l] = temp
編輯:更具體地說,考慮一下外循環的最后一次迭代會發生什么。 lista[i]
將是列表上的最后一個位置,並且每次lista[l]
較小時都會交換一次,因此最后您擁有最小的數字作為最后一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.