關(guān)于列表的排序和逆序問題,我們在遇到很多算法問題以及數(shù)據(jù)分析的時候,我們都會涉及到這兩種問題,通常在求解問題的時候把數(shù)據(jù)放在列表中,然后使用列表方法進行排序逆序,都能迅速的幫助我們解決問題。
1. 列表排序
列表排序的時候我們可以采用兩種方式,一種使用sorted(list)進行排序,一種是使用list.sort()進行排序,他們的使用結(jié)構(gòu)分別為:
1) listname.sort(key=None,reverse=False)
listname為目標列表,key表示指定一個從每個列表元素中提取一個比較的鍵,reverse為可選參數(shù),當指定為True時為降序,如果為Flase則為升序。默認為升序。
2) newlist = sorted(listname,key=None,reverse=False)
newlist為新的序列,listname為要排序的列表,key和reverse和1)中一致。
兩種方式的區(qū)別在于前者等于在原序列上進行直接修改,而后者會生成一個新的序列。
先定義一個列表為my_list = [2,1,3,5,4,6,8,9,7,10],然后我們進行排序。
代碼如下:
my_list = [2,1,3,5,4,6,8,9,7,10] my_list.sort()#這種格式是直接在列表后使用sort()函數(shù) b = sorted(my_list)#這種方式是定義一個新列表來存放排序過的序列 print(b) print(my_list)
輸出結(jié)果為:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
這兩種方式的使用可以自己選擇,但一定要注意格式的正確性。
2. 列表逆序
我們在做算法題的時候,很多時候需要把我們存放的數(shù)據(jù)逆序,把一個容器中的數(shù)據(jù)逆序在Python中采用reverse()函數(shù)或者reversed()顯得十分簡單。
他們的結(jié)構(gòu)和排序結(jié)構(gòu)有所不同,reverse()和sort()類似,都是直接在列表后面使用方法就可以了,但reversed需要在前面加上一個存儲類型(因為在reversed()作用后,返回一個迭代器,迭代器中的數(shù)據(jù)是逆序過的,我們使用一種已知的存儲結(jié)構(gòu)來存儲迭代器中的元素更方便訪問,通常會使用列表方法)。
list.reverse() newlist = list(reversed(list))
我們來看一下實例:
my_list = [2,1,3,5,4,6,8,9,7,10] c = list(reversed(my_list))#使用reversed逆序一定要加上一個存儲類型 my_list.reverse()#使用reverse逆序 print(c)#輸出 print(my_list)#輸出
輸出結(jié)果為:
[10, 7, 9, 8, 6, 4, 5, 3, 1, 2] [10, 7, 9, 8, 6, 4, 5, 3, 1, 2]
列表逆序的時候還可以使用前面學習過的切片操作,直接進行逆序:
my_list = [2,1,3,5,4,6,8,9,7,10] my_list = my_list[::-1] print(my_list)
輸出結(jié)果為:
[10, 7, 9, 8, 6, 4, 5, 3, 1, 2]
3. 總結(jié)
經(jīng)過前面的學習,加上本章的內(nèi)容,大家應該可以試著去完成下面這個題目,這個題的解法比較適合本章節(jié)的學習。
題目鏈接為:1434。
關(guān)于列表的推薦習題比較多,下面還為大家提供大量的習題去進行練習,大家可以選擇性去作答。
1024 | [編程入門]矩陣對角線求和 |
1025 | [編程入門]數(shù)組插入處理 |
1026 | [編程入門]數(shù)字逆序輸出 |
1043 | [編程入門]三個數(shù)字的排序 |
1045 | [編程入門]自定義函數(shù)之整數(shù)處理 |
1046 | [編程入門]自定義函數(shù)之數(shù)字后移 |
1053 | 二級C語言-平均值計算 |
1058 | 二級C語言-求偶數(shù)和 |
1061 | 二級C語言-計負均正 |
1070 | 二級C語言-成績歸類 |
1132 | C語言訓練-最大數(shù)問題 |
1483 | 藍橋杯算法提高VIP-數(shù)組替換 |
1491 | 藍橋杯算法提高VIP-交換Easy |
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程