Python中的排序函數argsort,sort,sorted
1、argsort()函數
對數組的索引或下标進行排序
測試執行個體1:
from numpy import *
arr = array([,,])
#對索引進行的排序
AsendSortInx = argsort(arr) #索引升序排序(1)
DesendSortInx = argsort(-arr)#索引降序排序(2)
print('升序排序的索引')
print(AsendSortInx)
print('升序排序的索引')
print(DesendSortInx)
#通過索引值排序後的數組
AsendSort = arr[argsort(arr)] #索引值升序排序(3)
DesendSort = arr[argsort(-arr)]#索引值降序排序(4)
print('升序排序的索引值')
print(AsendSort)
print('升序排序的索引值')
print(DesendSort)
#用數組調用同(1)
print('數組直接調用')
x = arr.argsort()
print(x)
運作結果1:

2、sort()函數
是list清單中的函數,可對list進行排序。
使用sort函數排序會影響清單本身。
測試執行個體2:
arr = [,,,,,]
arr.sort()
print(arr)
運作結果2:
3、sorted()函數
可以對list或者Dict進行排序。
但sorted函數對清單排序不會影響清單本身。
sorted(iterable, cmp=None, key=None, reverse=False)
參數說明:
iterable:是可疊代類型;
cmp:用于比較的函數,比較什麼由key決定;
key:用清單元素的某個屬性或函數進行作為關鍵字,有預設值,疊代集合中的一項;通常為帶一個參數的函數。
其中cmp和key可以是lambda表達式。
reverse:排序規則. reverse = True 降序 或者 reverse = False 升序,有預設值。
傳回值:是一個經過排序的可疊代類型,與iterable一樣。
——對清單的排序—–
測試執行個體3:
arr = [,,,,,]
a = sorted(arr)
print('排序結果')
print(a)
print('排序清單')
print(arr)
運作結果3:
證明排完序後并不影響排序清單的結果。
——對元素為元祖的清單排序——
①、用cmp函數排序
因為本次我的IDE為python3,因cmp函數已經不存在,故使用key函數代替cmp函數。(參考https://my.oschina.net/soarwilldo/blog/506415#OSC_h2_6)
如果強行使用,會報出TypeError: ‘cmp’ is an invalid keyword argument for this function 這樣的錯誤。
測試執行個體4:
#用cmp函數進行排序
list1 = [('david', ), ('mary',), ('sara',),('lily',)]
list1sorted1 = sorted(list1,key = lambda x:x[:])#對元祖tuple中第一個元素進行排序
list1sorted2 = sorted(list1,key = lambda x:x[:])#對元祖tuple中第二個元素進行排序
print('以名字排序結果:')
print(list1sorted1)
print('以分數排序結果:')
print(list1sorted2)
運作結果4:
②用key函數排序
指定元祖中的第幾個域為排序依據。
測試執行個體5:
#用key函數進行排序
list1 = [('david', ), ('mary',), ('sara',),('lily',)]
list1sorted1 = sorted(list1,key = lambda a:a[])#對元祖tuple中第一個元素進行排序
list1sorted2 = sorted(list1,key = lambda a:a[])#對元祖tuple中第二個元素進行排序
print('以名字排序結果:')
print(list1sorted1)
print('以分數排序結果:')
print(list1sorted2)
運作結果5:
③用reverse排序
可取True代表降序,False代表升序。
預設對元祖的第一個元素進行排序。
測試執行個體6:
#用reverse排序
list1 = [('david', ), ('mary',), ('sara',),('lily',)]
de = sorted(list1,reverse = True)#True代表降序 false代表升序 預設對元祖的第一個元素進行排序
inc = sorted(list1,reverse = False)
print('降序:')
print(de)
print('升序:')
print(inc)
運作結果6:
④多級排序operator.itemgetter()
sorted(list, key=operator.itemgetter(x,y))
測試執行個體7:
from operator import *
#用operator.itemgetter(x,y)進行多級排序
list1 = [('john', 'A', ), ('dave', 'B', ), ('jane', 'B', )]
mutirandk = sorted(list1,key=itemgetter(,))#先根據第一個元素進行排序 再根據第二個元素進行排序
print('多級排序:先根據等級 後根據分數排序')
print(mutirandk)
運作結果7:
可以看出dave和jane兩人等級均為B,是以要根據第二排序的元素進行确定,10小于12,是以dave在前。
——對字典的排序—–
例如:sorted(dic.items(), key=lambda d:d[1], reverse = False )
排序元素為:在python3中items() 傳回字典的一個元祖清單。 【ps】在python2中用iteritems()
key:以元祖中的第二個元素為依據。 也可以寫為key = itemgetter(1)
reverse:為False代表升序排序 True代表降序排序
示例代碼8:
#對字典進行排序
dic = {'zc': ,'05h':,'mx':}
sorteddic = sorted(dic.items(),key=itemgetter(),reverse=False)
print('對字典的排序結果')
print(sorteddic)
運作結果8:
終結
(參考http://blog.csdn.net/shengmingqijiquan)
http://www.cnblogs.com/100thMountain/p/4719503.html
http://www.cnblogs.com/sysu-blackbear/p/3283993.html)
雖然一邊看實戰一邊學python,進度是慢了點,但是看到自己一天天寫的筆記、積累的東西還是覺得很充實,排序搞定,加油~~~