时间:2023-03-20 10:27:51 | 栏目:Python代码 | 点击:次
这三个排序方法应对日常工作基本够用
先说一下三者的区别
先看两个简单的升序排序,分别使用 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的时候很麻烦,说完了区别,来具体讲讲使用方法
# 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 降序排序 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]
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]
# 字符串类型排序 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']
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]]
# 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]
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}]
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]
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)]
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]
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]
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]
# # 降序排序 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]
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]]
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]]
# -*- coding: cp936 -*- import numpy as np #一维数组排序 arr = [1, 3, 5, 2, 4, 6] arr = np.array(arr) print arr print np.sort(arr)#或print np.sort(arr,axis=None) print (np.argsort(arr)) # 正序输出索引,从小到大 print (np.argsort(-arr)) # 逆序输出索引,从大到小
输出结果:
[1 3 5 2 4 6]
[1 2 3 4 5 6]
[0 3 1 4 2 5]
[5 2 4 1 3 0]
#二维数组排序 list1 = [[4,3,2],[2,1,4]] array=np.array(list1) print array array.sort(axis=1) #axis=1按行排序,axis=0按列排序 print array
输出结果:
[[4 3 2]
[2 1 4]][[2 3 4]
[1 2 4]]