这三个排序方法应对日常工作基本够用
先说一下三者的区别
sort sorted 是用在 list 数据类型中的排序方法
argsort 是用在 numpy 数据类型中的排序方法 numpy 里也有一个 sort 方法 下面会讲
sort 和 sorted 的区别如下
先看两个简单的升序排序 分别使用 sorted 和 sort 方法
# sorted num_list [1, 8, 2, 3, 10, 4, 5] ordered_list sorted(num_list) print(ordered_list) # [1, 2, 3, 4, 5, 8, 10]
# sort num_list [1, 8, 2, 3, 10, 4, 5] num_list.sort() print(num_list) # [1, 2, 3, 4, 5, 8, 10]
可以看出 sorted 并没有修改原来的数组 而是将排序的结果作为参数传递给一个新的数组 而 sort 则在原数组上直接进行了排序
区别就是 sorted 需要一个变量接收排序结果 sort不用
建议使用 sorted 因为 sort 虽然代码更简洁 但是会修改原数组 这样不灵活 如果你有多个地方同时使用了这个数组 那么经过 sort 操作之后的数组就已经不是原来那个数组了 debug的时候很麻烦
说完了区别 来具体讲讲使用方法
1.升序排序# sorted 升序排序 num_list [1, 8, 2, 3, 10, 4, 5] ordered_list sorted(num_list) print(ordered_list) # [1, 2, 3, 4, 5, 8, 10]
# sort 升序排序 num_list [1, 8, 2, 3, 10, 4, 5] num_list.sort() print(num_list) # [1, 2, 3, 4, 5, 8, 10]2.降序排序
# sorted 降序排序 num_list [1, 8, 2, 3, 10, 4, 5] ordered_list sorted(num_list, reverse True) print(ordered_list) # [1, 2, 3, 4, 5, 8, 10]
# sort 降序排序 num_list [1, 8, 2, 3, 10, 4, 5] num_list.sort(reverse True) print(num_list) # [1, 2, 3, 4, 5, 8, 10]3.如果不想要排序后的值 想要排序后的索引 可以这样做
num_list [1, 8, 2, 3, 10, 4, 5] ordered_list sorted(range(len(num_list)), key lambda k: num_list[k]) print(ordered_list) # [0, 2, 3, 5, 6, 1, 4]4.字符串类型排序
# 字符串类型排序 str_list [ 1 , 8 , 2 , 3 , 10 , 4 , 5 ] ordered_list sorted(str_list) print(ordered_list) # [ 1 , 10 , 2 , 3 , 4 , 5 , 8 ] str_list [ A , D , B , N , C , R , V ] ordered_list sorted(str_list) print(ordered_list) # [ A , B , C , D , N , R , V ]5.二维数组排序
book_list [ [ 北大马克思主义研究 , 9787509728529 , 2011], [ 人的解放 , 9787215064003 , 2014], [ 西方经典悦读 资本论 , 9787200092882 , 2012], [ 列宁的一生 , 9787501319343 , 2013], # sorted 按出版年升序排序 ordered_list sorted(book_list, key lambda book: book[2]) print(ordered_list) # [[ 北大马克思主义研究 , 9787509728529 , 2011], [ 西方经典悦读 资本论 , 9787200092882 , 2012], [ 列宁的一生 , 9787501319343 , 2013], [ 人的解放 , 9787215064003 , 2014]] # sort 按出版年降序排序 book_list.sort(key lambda book: book[2], reverse True) print(book_list) # [[ 人的解放 , 9787215064003 , 2014], [ 列宁的一生 , 9787501319343 , 2013], [ 西方经典悦读 资本论 , 9787200092882 , 2012], [ 北大马克思主义研究 , 9787509728529 , 2011]]6.二维数组获取排序后的索引
# sorted 获取排序后的索引 book_list [ [ 北大马克思主义研究 , 9787509728529 , 2011], [ 人的解放 , 9787215064003 , 2014], [ 西方经典悦读 资本论 , 9787200092882 , 2012], [ 列宁的一生 , 9787501319343 , 2013], ordered_list sorted(range(len(book_list)), key lambda k: book_list[k][2]) print(ordered_list) # [0, 2, 3, 1]7.字典数组排序
book_list [
{ name : 北大马克思主义研究 , isbn : 9787509728529 , publish_year : 2011},
{ name : 人的解放 , isbn : 9787215064003 , publish_year : 2014},
{ name : 西方经典悦读 资本论 , isbn : 9787200092882 , publish_year : 2012},
{ name : 列宁的一生 , isbn : 9787501319343 , publish_year : 2013},
# sorted 按出版年降序排序
ordered_list sorted(book_list, key lambda book: book[ publish_year ], reverse True)
print(ordered_list) # [{ name : 人的解放 , isbn : 9787215064003 , publish_year : 2014}, { name : 列宁的一生 , isbn : 9787501319343 , publish_year : 2013}, { name : 西方经典悦读 资本论 , isbn : 9787200092882 , publish_year : 2012}, { name : 北大马克思主义研究 , isbn : 9787509728529 , publish_year : 2011}]
# sort 按出版年升序排序
book_list.sort(key lambda book: book[ publish_year ])
print(book_list) # [{ name : 北大马克思主义研究 , isbn : 9787509728529 , publish_year : 2011}, { name : 西方经典悦读 资本论 , isbn : 9787200092882 , publish_year : 2012}, { name : 列宁的一生 , isbn : 9787501319343 , publish_year : 2013}, { name : 人的解放 , isbn : 9787215064003 , publish_year : 2014}]
8.字典数组获取排序后的索引
book_list [
{ name : 北大马克思主义研究 , isbn : 9787509728529 , publish_year : 2011},
{ name : 人的解放 , isbn : 9787215064003 , publish_year : 2014},
{ name : 西方经典悦读 资本论 , isbn : 9787200092882 , publish_year : 2012},
{ name : 列宁的一生 , isbn : 9787501319343 , publish_year : 2013},
ordered_list sorted(range(len(book_list)), key lambda k: book_list[k][ publish_year ])
print(ordered_list) # [0, 2, 3, 1]
9.对象排序
class Book(object): def __init__(self, name, isbn, publish_year): self.name name self.isbn isbn self.publish_year publish_year def __repr__(self): return repr((self.name, self.isbn, self.publish_year)) book_list [ Book( 北大马克思主义研究 , 9787509728529 , 2011), Book( 人的解放 , 9787215064003 , 2014), Book( 西方经典悦读 资本论 , 9787200092882 , 2012), Book( 列宁的一生 , 9787501319343 , 2013), # sorted 按出版年降序排序 ordered_list sorted(book_list, key lambda book: book.publish_year, reverse True) print(ordered_list) # [( 人的解放 , 9787215064003 , 2014), ( 列宁的一生 , 9787501319343 , 2013), ( 西方经典悦读 资本论 , 9787200092882 , 2012), ( 北大马克思主义研究 , 9787509728529 , 2011)] # sort 按出版年升序排序 book_list.sort(key lambda book: book.publish_year) print(book_list) # [( 北大马克思主义研究 , 9787509728529 , 2011), ( 西方经典悦读 资本论 , 9787200092882 , 2012), ( 列宁的一生 , 9787501319343 , 2013), ( 人的解放 , 9787215064003 , 2014)]10.对象排序获取排序后的索引
book_list [ Book( 北大马克思主义研究 , 9787509728529 , 2011), Book( 人的解放 , 9787215064003 , 2014), Book( 西方经典悦读 资本论 , 9787200092882 , 2012), Book( 列宁的一生 , 9787501319343 , 2013), ordered_list sorted(range(len(book_list)), key lambda k: book_list[k].publish_year) print(ordered_list) # [0, 2, 3, 1]11.一维数组排序【numpy】
numpy 只有 sort 没有 sorted 且 numpy 的 sort 方法 和 list 的 sorted 方法使用起来类似
import numpy as np # 一维数组 num_list np.array([1, 8, 2, 3, 10, 4, 5]) index_list np.sort(num_list) print(index_list) # [ 1 2 3 4 5 8 10]12.一维数组获取排序后的索引【numpy】
num_list np.array([1, 8, 2, 3, 10, 4, 5]) index_list np.argsort(num_list) print(index_list) # [0 2 3 5 6 1 4]13.一维数组降序排序【numpy】
# # 降序排序 num_list np.array([1, 8, 2, 3, 10, 4, 5]) index_list np.argsort(-num_list) # 加负号按降序排序 print(index_list) # [4 1 6 5 3 2 0]14.二维数组排序【numpy】
num_list np.array([ [1, 8, 2, 9], [8, 2, 4, 5], [2, 3, 7, 4], [1, 2, 3, 5] ordered_list np.sort(num_list, axis 0) # axis 0 是按列排序 print(ordered_list) # [[1 2 2 4] # [1 2 3 5] # [2 3 4 5] # [8 8 7 9]] ordered_list np.sort(num_list, axis 1) # axis 1 是按行排序 print(ordered_list) # [[1 2 8 9] # [2 4 5 8] # [2 3 4 7] # [1 2 3 5]]15.二维数组获取排序后的索引【numpy】
num_list np.array([ [1, 8, 2, 9], [8, 2, 4, 5], [2, 3, 7, 4], [1, 2, 3, 5] ordered_list np.argsort(num_list, axis 0) # axis 0 是按列排序 print(ordered_list) # [[0 1 0 2] # [3 3 3 1] # [2 2 1 3] # [1 0 2 0]] ordered_list np.argsort(num_list, axis 1) # axis 1 是按行排序 print(ordered_list) # [[0 2 1 3] # [1 2 3 0] # [0 1 3 2] # [0 1 2 3]]



