python中选择排序法对数组进行升序排序_sort函数对字符串数组排序

python中选择排序法对数组进行升序排序_sort函数对字符串数组排序这三个排序方法应对日常工作基本够用先说一下三者的区别sort,sorted是用在list数据类型中的排序方法argsort是用在numpy数据类型中的排序方法(numpy里也有一个sort方法,下面会讲)sort和sorted的区别如下????先看两个简单的升序排序,分别使用sorted和sort方法#sortednum_list=[1,8,2,3,10,4,5]ordered_list=sorted(num_list)print

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

先说一下三者的区别
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]]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170320.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql将yyyy转换_Mysql时间格式转换

    mysql将yyyy转换_Mysql时间格式转换对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6日期和时间类型。这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:mysql>SELECTsomethingFROMtableWHERETO_DAYS(NOW())-TO_DAYS(date_col)<=30;DAYOFWEEK(date)返回…

    2022年6月19日
    46
  • 一篇文章带你搞懂DEX文件的结构[通俗易懂]

    一篇文章带你搞懂DEX文件的结构[通俗易懂]*本篇文章已授权微信公众号guolin_blog(郭霖)独家发布本文地址:一篇文章带你搞懂DEX文件的结构DEX文件就是AndroidDalvik虚拟机运行的程序,关于DEX文件的结构的重要性我就不多说了。下面,开练!建议:不要只看,跟着我做。看再多遍不如自己亲自实践一遍来的可靠,别问我为什么知道。泪崩ing…..首先,我们需要自己构造一个dex文件,因为自己构造的比…

    2022年6月27日
    152
  • 如何系统备份ghost_服务器可以用pe备份吗

    如何系统备份ghost_服务器可以用pe备份吗电脑出现系统故障是一个很正常的现象,在这个时候只能通过重组系统的方法来解决故障,如果我们此前有将正常的系统备份到U盘里面那么重装系统就会变得很简单,接下来就教给大家怎样用GHOST备份系统。1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。2、重启后电脑就会进入一键…

    2022年9月6日
    2
  • Jenkins(8)构建触发器之定时构建和轮询 SCM「建议收藏」

    Jenkins(8)构建触发器之定时构建和轮询 SCM「建议收藏」前言跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。jenkins的定时任务是用的crontab语法定时构建语法

    2022年7月31日
    3
  • MYSQL IFNULL使用功能

    MYSQL IFNULL使用功能

    2022年1月2日
    71
  • sql的外连接包括_sql几种连接方式

    sql的外连接包括_sql几种连接方式简述SQL中的“外连接” 1、SQL中外连接分为三种:左外连接、右外连接、全外连接。2、英文书写格式:左外连接:LEFTOUTERJOIN(LEFTJOIN);右外连接:RIGHTOUTERJOIN(RIHTJOIN);全外连接:FULLOUTERJOIN(FULLJOIN)。3、简记:左外连接显示“左边全部的”和“右边与左边相同的”;右外

    2022年8月30日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号