当前位置: 首页 > news >正文

Python sort() 和 sorted() 的区别应用实例详解

    大家好,今天针对 Python 中 sort() 和 sorted() 之间的区别,来一个实例详细解读。sort — 顾名思义就是排序的意思,它可以接收的对象为可迭代的数据类型。今天以列表为例子演示两者的不同点、相同点,以及其中一些常用的高级参数使用方法。



    sort(),它是不可以储存变量值的 : 例如有一个列表为 day_lst = [‘Monday’,‘Tuesday’,‘Wednesday’,‘Thursday’,‘Friday’,‘Saturday’,‘Sunday’], 当创建一个新的变量名为 new_lst 去执行 day_lst.sort(),然后打印这个变量值,结果为 “None” , 这正验证了 sort() 方法是不可以储存变量值的,因此返回的是空值。



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']new_lst = day_lst.sort()print(new_lst)


    对 day_lst sort() 排序后,结果为升序 (ascending)



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']day_lst.sort()print(day_lst)


    sorted(),它是可以储存变量值的 : 同样 列表为 day_lst = [‘Monday’,‘Tuesday’,‘Wednesday’,‘Thursday’,‘Friday’,‘Saturday’,‘Sunday’] ,当创建一个新的变量名为 new_lst 去执行 sorted(day_lst),然后打印这个变量值, 结果为一个已经按升序排序的新列表。



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']new_lst = sorted(day_lst)print(new_lst)


    以上两种方法,默认的排序方式都是升序 — ascending,那么如果要变成降序 — descending,该怎样实现呢? 只需要加上参数 reverse = True 就可以了。先看看两种方法实现的结果。



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']day_lst.sort(reverse=True)print(day_lst)


在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']new_lst = sorted(day_lst,reverse=True)print(new_lst)


    以上可见,当加上参数 reverse = True, 结果完全是倒转了。那就说明了 reverse 这个可选 (optional ) 参数,默认为 False。 我们可以再看看以下图就知道为什么它是可选的参数,又或者说为什么知道有这个参数的存在可选?



在这里插入图片描述



在这里插入图片描述



    根据以上2个图所显示,无论是 sort() 还是 sorted() , 当写入他们的方法后,编译器都会提示显示有相关的可选参数,以及一些自带的可选参数默认的值。而 reverse 就是一个关键字参数,值为 bool 类型,那就是 True 和 False



    但可能你们会问,方法带出来的提示并没有显示究竟默认的方式是升序还是降序,那怎样判断呢? 我们可以通过查看相对应的底层代码(源码)看看,这也是作为程序员必须掌握的查看方法,因为每个方法里面,包含好多不同的实现方法、参数用法的解释说明等等。



    键盘按着 “Ctrl” 键,然后鼠标移动到相对应的方法,等待方法变成带超链接的状态就可以鼠标点击它,这样就可以进入它的底层代码看相对应的实现规则、逻辑。



    "Return a new list containing all items from the iterable in ascending order.

A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order. "



    图里的这段话大概意思就是,sorted() 方法返回一个升序的可迭代的数据类型。其中它包含2个参数,一个就是 key,可以自定义; 另外一个就是 reverse,它可以设置为降序的方式。



在这里插入图片描述



    最后演示一下参数 key 的具体用法,由于 sort() 和 sorted() 这两个方法都支持 key参数,所以只演示 sort(),不再重复 sorted() 这部分了。例如有 num_lst = [50,100,-60,20,40] 这样一个列表。



    在传入 key=abs 这个参数后,可见输出的排序结果为 [20, 40, 50, -60, 100], 按照默认升序逻辑,-60 不是最小吗?为什么它排在第4位,而不是第1位呢? 这样要注意的是因为 key 的值为 abs, abs 意思就是绝对值的意思,因此 -60的绝对值就是60,所以编译器就按 -60转为绝对值 60去排序。



在这里插入图片描述



day_lst = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']num_lst = [50,100,-60,20,40]num_lst.sort(key=abs)print(num_lst)


    例如有一个 letter_lst = [‘E’, ‘G’, ‘X’, ‘b’, ‘f’, ‘y’] 的列表, 在传入key=str.lower 后, 它的作用就是先把列表里的字母的大写字母转换成小写,就相当于首先变成 [‘e’, ‘g’, ‘x’, ‘b’, ‘f’, ‘y’] , 要注意的是, 字符串类型的排序按照ASCII的大小进行比较。根据以下截取的底层代码解释,If a key function is given, apply it once to each list item and sort them,ascending or descending, according to their function values. 意思就是排序的结果是根据它们的值而定。相关的字母 ASCII 对照表,可以看我文章最后的对照图。



在这里插入图片描述



    因此在转变成全小写列表 [‘e’, ‘g’, ‘x’, ‘b’, ‘f’, ‘y’] 后, 根据它们对应的 ASCII的值,就相当于 [101, 103, 120, 98, 102, 121] 这样的列表, 然后再按升序排序方式,相当于 [98,101,102,103,120, 121 ] , 因此最后输出的结果为 [‘b’, ‘E’, ‘f’, ‘G’, ‘X’, ‘y’] , 因为 98 对应为 b, 101 对应为 e, 102 对应为 f, 103 对应为 g, 120 对应为 x , 121 对应为 y



在这里插入图片描述





letter_lst = ['E', 'G', 'X', 'b', 'f', 'y']# num_lst.sort(key=abs)letter_lst.sort(key=str.lower)print(letter_lst)


在这里插入图片描述



    关于这两个方法的主要常用方法就介绍到这里了, 如果有任何问题,欢迎评论区留言问,有空的时候会尽快回复!

http://www.lryc.cn/news/349723.html

相关文章:

  • 七、Redis三种高级数据结构-HyperLogLog
  • 2024年【金属非金属矿山(露天矿山)安全管理人员】模拟考试题库及金属非金属矿山(露天矿山)安全管理人员作业模拟考试
  • 网站DDoS攻击应对策略:全面防护与恢复指南
  • 线性/非线性最小二乘 与 牛顿/高斯牛顿/LM 原理及算法
  • mysqldump: Error 2013 导致mysql停止运行
  • 2023年数维杯国际大学生数学建模挑战赛D题洗衣房清洁计算解题全过程论文及程序
  • python 两种colorbar 最大最小和分类的绘制
  • Linux-基础IO
  • 202006青少年软件编程(Python)等级考试试卷(二级)
  • 【LeetCode】每日一题:2244.完成所有任务需要的最少轮数
  • 百度文心一言 java 支持流式输出,Springboot+ sse的demo
  • 59.基于SSM实现的网上花店系统(项目 + 论文)
  • 什么是字节码?
  • C++ JWT的使用
  • SpringBoot内置插件的使用(jackson和lombok)
  • Franz Electron + React 源码启动运行填坑指南
  • 网络安全法中关于网络信息的保护和监管,有哪些规定?
  • 前端XHR请求数据
  • 利用香港多IP服务器优化网站访问速度的关键策略?
  • 如何快速将视频做成二维码?扫描二维码播放视频的制作方法
  • 使用python开发的闭运算调试器
  • 一例Phorpiex僵尸网络变种的分析
  • PDF文件转换为CAD的方法
  • Java为什么会成为现在主流的编程语言
  • 动手学深度学习16 Pytorch神经网络基础
  • 前端无样式id或者class等来定位标签
  • 机器人工具箱学习(三)
  • 华为OD机试 - CPU算力分配(Java 2024 C卷 100分)
  • web前端框架设计第八课-表单控件绑定
  • 这三个网站我愿称之为制作答辩PPT的神