您好,登錄后才能下訂單哦!
有如下代碼:
li = [13,22,6,99,11] for i in range(len(li)): print li[i]
輸出結果:
13 22 6 99 11
要求:實現一個功能,將列表li所有數字按照從左到右的大小順序進行排序
即按照如下規則:
13 和 22 比較,將大的值放在右側,即:[13, 22, 6, 99, 11]
22 和 6 比較,將大的值放在右側,即:[13, 6, 22, 99, 11]
22 和 99 比較,將大的值放在右側,即:[13, 6, 22, 99, 11]
99 和 11 比較,將大的值放在右側,即:[13, 6, 22, 11, 99,]
-----------------省略部分---------------------------
13 和 6 比較,將大的值放在右側,即:[6, 13, 22, 11, 99,]
從上述可以知,比較要取列表中相鄰的兩個數,所以這里用for循環,變量用m
相鄰的兩個數字用li(m)和li(m+1)
for m in range(len(li)) if li[m] > li[m+1]: temp = li[m] li[m] = li[m+1] li[m+1] = temp]
但是該方法有個弊端,如果m等于列表最后一個下標,那么li[m+1]就不存在從而出現報錯
所以對以上方法進行改進:
for m in range(len(li) -1) if li[m] > li[m+1]: temp = li[m] li[m] = li[m+1] li[m+1] = temp print li
輸出結果:
[13, 6, 22, 11, 99]
該結果與原始列表li=[13,22,6,99,11]進行對比,發現只做了一次排序,如果要進一步排序還要再接著進行循環排序:
所以對以上代碼進行改寫:
li = [13, 22, 6, 99, 11]for m in range(len(li)-1): for n in range(m+1, len(li)): if li[m]> li[n]: temp = li[n] li[n] = li[m] li[m] = tempprint li
解釋:上面用到兩層for循環,第一層for循環m取4次值,第二次for循環5次值
當m=0時,range(m+1,len(li))為range(1,5),也就是列表li的下標n的取值:[1,2,3,4]
當m=1時,range(m+1,len(li))為range(2,5),也就是列表li的下標n的取值:[2,3,4]
當m=2時,range(m+1,len(li))為range(3,5),也就是列表li的下標n的取值:[,3,4]
當m=3時,range(m+1,len(li))為range(4,5),也就是列表li的下標n的取值:[4]
后面的比較跟原來比較方式一樣。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。