python--sort,sorted,argsort

1、sort 只是list類型的內建函數,對其他非列表型序列不適用。
>>> a = [5,2,1,9,6]
>>> a.sort()                 #默認從小到大
>>> a
[1, 2, 5, 6, 9]                  
>>> a.sort(reverse=True)     #reverse後從大到小
>>> a
[9, 6, 5, 2, 1]
原地排序,並不返回排序後的對象,a就是排序後的,默認從小到大reverse=True,表示從大到小
2、sorted是所有類型的內建函數 ,返回排序後的對象,原對象不改變
     簡單類型:list,tuple,string,用法:
>>> a = [5,2,1,9,6]
>>> b = sorted(a)
>>> b
[1, 2, 5, 6, 9]                #a是原對象,b是排序後的對象
>>> a
[5, 2, 1, 9, 6]
>>> b=sorted(a,reverse=True)
>>> b
[9, 6, 5, 2, 1]
>>> a
[5, 2, 1, 9, 6]
>>> a = ['aa','BB','bb','zz','CC']
>>> sorted(a)
['BB', 'CC', 'aa', 'bb', 'zz']
>>> sorted(a,reverse=True)
['zz', 'bb', 'aa', 'CC', 'BB'] 
進階:sorted(a,key=...,reversed=True)
a = ['CCC', 'bb', 'ffff', 'z']
>>> sorted(a,key=len)             #按字符串個數排序
['z', 'bb', 'CCC', 'ffff']
>>> sorted(a,key=str.lower)       #將字符串轉爲小寫之後排序
['bb', 'CCC', 'ffff', 'z']
>>> a=[{'age': 20, 'name': 'abc'}, {'age': 25, 'name': 'ghi'}, {'age': 30, 'name': 'def'}]
>>> sorted(a,key =lambda x:x['age'])    #按年齡排序
[{'age': 20, 'name': 'abc'}, {'age': 25, 'name': 'ghi'}, {'age': 30, 'name': 'def'}]
3、argsort,屬於numpy中的函數
     返回排序後元素在原對象中的下標
a=array([(5,4,3,2,6),(7,8,0,1,9)])
>>> a
array([[5, 4, 3, 2, 6],
       [7, 8, 0, 1, 9]])
>>> a.argsort()
array([[3, 2, 1, 0, 4],
       [2, 3, 0, 1, 4]], dtype=int64)
>>> a.argsort(axis=0)
array([[0, 0, 1, 1, 0],
       [1, 1, 0, 0, 1]], dtype=int64)
這裏要明白numpy下數組的排列:介紹三維數組,
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
  • 最後的軸從左到右打印
  • 次後的軸從頂向下打印
  • 剩下的軸從頂向下打印,每個切片通過一個空行與下一個隔開。
  • 一維數組被打印成行,二維數組成矩陣,三維數組成矩陣列表。
默認axis= -1: 行,是最後一個軸
         axis=0: 剩餘軸
         axis=-1:列
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
a=array([arange(24)]).reshape(2,3,4)
>>> a.argsort()
array([[[0, 1, 2, 3],                    #按行排序
        [0, 1, 2, 3],
        [0, 1, 2, 3]],

       [[0, 1, 2, 3],
        [0, 1, 2, 3],
        [0, 1, 2, 3]]], dtype=int64)
>>> a.argsort(-1)
array([[[0, 1, 2, 3],                    #還是按行
        [0, 1, 2, 3],
        [0, 1, 2, 3]],

       [[0, 1, 2, 3],
        [0, 1, 2, 3],
        [0, 1, 2, 3]]], dtype=int64)
>>> a.argsort(axis=0)
array([[[0, 0, 0, 0],                    #按第三軸
        [0, 0, 0, 0],
        [0, 0, 0, 0]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]], dtype=int64)
>>> a.argsort(axis=1)
array([[[0, 0, 0, 0],                    #按列0<4<8
        [1, 1, 1, 1],
        [2, 2, 2, 2]],

       [[0, 0, 0, 0],
        [1, 1, 1, 1],
        [2, 2, 2, 2]]], dtype=int64)
>>> 

參考:http://tech.ddvip.com/2013-02/1361016871190339.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章