python:sort,sorted,argsort,lexsort
生活随笔
收集整理的這篇文章主要介紹了
python:sort,sorted,argsort,lexsort
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Python list內置sort()方法用來排序,也可以用python內置的全局sorted()方法來對可迭代的序列排序生成新的序列
目錄
- 1.使用sort排序
- 2.使用sorted()排序
- key參數
- 3.argsort
- 4.lexsort
1.使用sort排序
用法:
list.sort(func=None, key=None, reverse=False(or True))
- 對于reverse這個bool類型參數,當reverse=False時:為正向排序;當reverse=True時:為方向排序。默認為False。
- 執行完后會改變原來的list,如果你不需要原來的list,這種效率稍微高點
- 為了避免混亂,其會返回none
2.使用sorted()排序
這個和第一種的差別之處在于:
- sorted()不會改變原來的list,而是會返回一個新的已經排序好的list
- list.sort()方法僅僅被list所定義,sorted()可用于任何一個可迭代對象
用法:
sorted(list)
- 該函數也含有reverse這個bool類型的參數,當reverse=False時:為正向排序(從小到大);當reverse=True時:為反向排序(從大到小)。當然默認為False。
- 執行完后會有返回一個新排序好的list
key參數
1.對復雜的元組排序
student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10), ] result = sorted(student_tuples, key=lambda student: student[2]) print result#輸出 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] # lambda student:student[2] 等價于# def f(student):# return student[2]2.根據字典的value排序
默認sorted是對dict的key排序的,如果要根據dict的value排序就需要指定key參數了
my_dict = {"a":"2", "c":"5", "b":"1"}result = sorted(my_dict) print result #默認對dict排序,不指定key參數,會默認對dict的key值進行比較排序 #result輸出: ['a', 'b', 'c']result2 = sorted(my_dict, key=lambda x:my_dict[x]) print result2 #指定key參數,根據dict的value排序 #result2輸出:['b', 'a', 'c']3對多列排序
a = [[2,3,4], [2,4,5],[3,3,4]] sorted(a, key=lambda x: (x[1], x[0])) print(a) #輸出 [[2, 3, 4], [3, 3, 4], [2, 4, 5]]3.argsort
numpy.argsort(a, axis=1, kind=‘quicksort’, order=None)
- a:所需排序的數組
- axis:數組排序時的基準,axis=0,按列排列;axis=1,按行排列
- order:一個字符串或列表,可以設置按照某個屬性進行排序
參數axis
>>>list1=[4,2,5,7,3] >>>a=np.array(list1) >>>a array([4, 2, 5, 7, 3]) >>>b=np.argsort(a) >>>b array([1, 4, 0, 2, 3], dtype=int64) # 列表b的元素表示的是原列表a中的元素的索引,5各元素的索引分別為0-4 # 返回的結果可以這樣解讀: # b[0]=1,表示原列表a的最小元素的索引為1,即原列表a中的第2個元素為最小值 # b[1]=4,表示原列表a的第二小元素的索引為4,即原列表a中的第5個元素為第二小元素 # ... # b[4]=3,表示原列表a中的最大元素的索引為3,即原列表a中的第4個元素為最大值 >>>list2=[[3, 2],[5, 7]] >>>c=np.array(list2) >>>c array([[3, 2],[5, 7]]) >>>np.argsort(c, axis=1) array([[1, 0],[0, 1]],dtype=int64) # axis=1,表明按照行進行排序,即是對[3, 2]進行排序,所以得到索引為[1, 0],其他同理 >>>np.argsort(c, axis=0) array([[0, 1],[0, 1]],dtype=int64) # axis=0,表明按照列進行排序,即是對[3, 5]進行排序,所以得到索引為[0, 1],其他同理參數order
>>> x = np.array([(1, 0), (0, 1)], dtype=[('x', '<i4'), ('y', '<i4')]) >>> x array([(1, 0), (0, 1)], dtype=[('x', '<i4'), ('y', '<i4')]) >>> np.argsort(x, order=('x','y')) # 先按照x進行比較,再按照y進行比較,即是先比較1與0 array([1, 0]) >>> np.argsort(x, order=('y','x')) # 先按照y進行比較,再按照x進行比較,即是先比較0與1 array([0, 1])4.lexsort
numpy.argsort(a, axis=-1, kind=‘quicksort’, order=None)
- a:所需排序的數組
- axis:數組排序時的基準,axis=0,按列排列;axis=1,按行排列
- order:一個字符串或列表,可以設置按照某個屬性進行排序
參考:
python sort與sorted使用筆記
Python 排序—sort與sorted學習
Python——numpy排序(sort、argsort、lexsort、partition、sorted)
總結
以上是生活随笔為你收集整理的python:sort,sorted,argsort,lexsort的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python:f/F,format,%的
- 下一篇: 判断机器学习算法或深度学习算法优势常考虑