广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python数组排序方法之sort、sorted和argsort详解
  • 433
分享到

python数组排序方法之sort、sorted和argsort详解

2024-04-02 19:04:59 433人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录引言sort 和 sorted 的区别如下?用法实例1.升序排序2.降序排序3.如果不想要排序后的值,想要排序后的索引,可以这样做4.字符串类型排序5.二维数组排序6.二维数组获

引言

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

先说一下三者的区别

  • 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]]

附:Python对数组进行排序,并输出排序后对应的索引值

# -*- 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]]

总结

到此这篇关于python数组排序方法之sort、sorted和argsort详解的文章就介绍到这了,更多相关python数组排序方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python数组排序方法之sort、sorted和argsort详解

本文链接: https://www.lsjlt.com/news/141868.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python数组排序方法之sort、sorted和argsort详解
    目录引言sort 和 sorted 的区别如下用法实例1.升序排序2.降序排序3.如果不想要排序后的值,想要排序后的索引,可以这样做4.字符串类型排序5.二维数组排序6.二维数组获取...
    99+
    2022-11-13
  • Python 列表排序方法reverse、sort、sorted详解
    python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。 reverse...
    99+
    2022-06-04
    详解 方法 列表
  • Python列表排序方法reverse、sort、sorted详解
    python语言中的列表排序方法有3个: reverse反转/倒序排序 sort正序排序 sorted可以获取排序后的列表 在更高级列表排序中,后两中方法还可以加入条件参数进行排...
    99+
    2022-11-12
  • 详解Java sort()数组排序(升序和降序)
    在Java中,使用sort()方法可以对数组进行排序,sort()方法有两个重载的版本:一个对基本数据类型数组进行排序,一个对对象数...
    99+
    2023-08-15
    Java
  • Java排序的那些事之sort方法的使用详解
    目录引言升序数组集合降序声明一个类实现接口匿名内部类实现接口Lambda表达式实现接口自定义数据类型的排序总结:引言 在学习Java过程中,排序sort是我们常用的功能;在Java里...
    99+
    2022-11-12
  • Python列表排序 list.sort方法和内置函数sorted用法
    很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.so...
    99+
    2022-11-11
  • Python排序算法之插入排序及其优化方案详解
    一、插入排序 插入排序与我们平时打扑克牌非常相似,将新摸到的牌插入到已有的牌中合适的位置,而已有的牌往往是有序的。 1.1 执行流程 (1)在执行过程中,插入排序会将序列分为2部...
    99+
    2022-11-12
  • C语言实现数组元素排序方法详解
    目录前言算法总结及实现优化算法前言 在实际开发中,有很多场景需要我们将数组元素按照从大到小(或者从小到大)的顺序排列,这样在查阅数据时会更加直观,例如: 一个保存了班级学号的数组,排...
    99+
    2023-02-11
    C语言数组元素排序 C语言数组元素 C语言数组排序
  • JS实现数组随机排序的三种方法详解
    目录1.利用数组方法sort实现随机排序2.洗牌算法实现随机排序3.洗牌算法深入分析全部代码1.利用数组方法sort实现随机排序 实现随机排序方法还是很多的,用for循环是可以写的,...
    99+
    2022-11-13
  • java数据结构与算法之桶排序实现方法详解
    本文实例讲述了java数据结构与算法之桶排序实现方法。分享给大家供大家参考,具体如下:基本思想:假定输入是由一个随机过程产生的[0, M)区间上均匀分布的实数。将区间[0, M)划分为n个大小相等的子区间(桶),将n个输入元素分配到这些桶中...
    99+
    2023-05-31
    java 数据结构 算法
  • PHP程序员必备的数组索引技巧:path和numy索引的使用方法详解!
    数组是PHP中最常用的数据结构之一,它可以存储多个值,并且可以通过键名来访问这些值。在PHP中,有许多种不同的数组索引技巧,但是其中两种最常用的是path和numy索引。在本篇文章中,我们将详细讲解这两种索引的使用方法以及它们的优缺点。 ...
    99+
    2023-10-01
    path numy 索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作