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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章