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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值