栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python数组排序方法详解(sort, sorted,argsort)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python数组排序方法详解(sort, sorted,argsort)

这三个排序方法应对日常工作基本够用

先说一下三者的区别
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]]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/268313.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号