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=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