我希望你明白爲什麼你的索引超出範圍錯誤。
這是一個問題,但現在讓我們來檢查一下你的代碼,因爲你有一些「概念性」的錯誤,因爲你並不完全理解你所做的代碼。
這是你的代碼實際上做了,這是當你得到這樣的錯誤,你應該怎麼想的:
sample=[23,44,12,1,6,87]
temp=0
for i in range(0,len(sample)-1):
if sample[i] > sample[i+1]:
temp=sample[i]
sample[i]=sample[i+1]
sample[i+1]=temp
第一行: 你i
將得到的值0,1,2至5 (在這種情況下)。
第二行: 它將檢查是否對列表的成員彼此相鄰。
它會檢查第一個(從左到右)是否大於第二個,它會檢查23> 44,這將是錯誤的,所以它不會執行其餘的代碼。
否i
將爲1,因此您將檢查44> 12,這是真實的,因此您的代碼將執行併成功交換這兩個。
這是學習在python中交換變量而不使用臨時變量的流暢方式的好時機。
sample[i], sample[i+1] = sample[i+1], sample[i]
查看更多關於它,谷歌python變量交換,如果你想。
回覆原始問題。
您已成功交換44和12,此列表代表[23,12,44,1,6,87]
。
但是,如果你繼續這樣做,它會:
交換44 1
交換44與6
不會掉44與87
不過這個名單現在將[23,12,1,6,44,87]
並且您的代碼將停止執行,因爲i
現在是5.
您是否發現了問題?
您需要重新運行幾次才能實際訂購它,因爲它不檢查列表是否已組織,而是交換彼此相鄰的成員。
所以,如果你(此特定列表)運行:
for j in range(3):
for i in range(0,len(sample)-1):
if sample[i] > sample[i+1]:
sample[i], sample[i+1] =sample[i+1], sample[i]
名單將訂購。
排序像列表這樣的有序集合是一個很多研究「領域」。
我建議你閱讀排序算法,從非常簡單的排序算法開始,如泡沫排序,因爲這是你的算法(如onatm建議)。
有一些「有趣」的方法來學習這種算法,例如,check this out。
如果您有興趣,也可以在this上閱讀。
This site很好地說明了算法是如何工作到排序列表的。
祝你好運,並請評論,如果您有任何疑問。
快速谷歌搜索將產生許多可能的排序算法。我建議你從那裏開始。至少,你的教科書中至少應該有一個。 –
更改範圍(0,len(sample))中的i:'to範圍內的i(0,len(sample)-1):'。現在你只需要修復你的算法。 –
什麼史蒂文說+你的交換邏輯與溫度也是錯誤的,溫度永遠不會在你的代碼中= =的左手邊 –