问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

深入理解python中的排序sort

发布网友 发布时间:2022-09-17 08:52

我来回答

1个回答

热心网友 时间:2023-02-14 17:08

进行一个简单的升序排列直接调用sorted()函数,函数将会返回一个排序后的列表:

sorted函数不会改变原有的list,而是返回一个新的排好序的list

如果你想使用就地排序,也就是改变原list的内容,那么可以使用list.sort()的方法,这个方法的返回值是None。

另一个区别是,list.sort()方法只是list也就是列表类型的方法,只可以在列表类型上调用。而sorted方法则是可以接受任何可迭代对象。

list.sort()和sorted()函数都有一个key参数,可以用来指定一个函数来确定排序的一个优先级。比如,这个例子就是根据大小写的优先级进行排序:

key参数的值应该是一个函数,这个函数接受一个参数然后返回以一个key,这个key就被用作进行排序。这个方法很高效,因为对于每一个输入的记录只需要调用一次key函数。
一个常用的场景就是当我们需要对一个复杂对象的某些属性进行排序时:

再如:

前面我们看到的利用key-function来自定义排序,同时Python也可以通过operator库来自定义排序,而且通常这种方法更好理解并且效率更高。
operator库提供了 itemgetter(), attrgetter(), and a methodcaller()三个函数

同时还支持多层排序

list.sort()和sorted()都有一个boolean类型的reverse参数,可以用来指定升序和降序排列,默认为false,也就是升序排序,如果需要降序排列,则需将reverse参数指定为true。

排序的稳定性指,有相同key值的多个记录进行排序之后,原始的前后关系保持不变

我们可以看到python中的排序是稳定的。

我们可以利用这个稳定的特性来进行一些复杂的排序步骤,比如,我们将学生的数据先按成绩降序然后年龄升序。当排序是稳定的时候,我们可以先将年龄升序,再将成绩降序会得到相同的结果。

传统的DSU(Decorate-Sort-Undecorate)的排序方法主要有三个步骤:

因为元组是按字典序比较的,比较完grade之后,会继续比较i。
添加index的i值不是必须的,但是添加i值有以下好处:

现在python3提供了key-function,所以DSU方法已经不常用了

python2.x版本中,是利用cmp参数自定义排序。
python3.x已经将这个方法移除了,但是我们还是有必要了解一下cmp参数
cmp参数的使用方法就是指定一个函数,自定义排序的规则,和java等其他语言很类似

也可以反序排列

python3.x中可以用如下方式:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
胜达这款车百公里油耗多少? 胜达节能油加盟办厂可靠吗是不是骗子 河南洛阳胜达就是骗子,我把钱交了也不来人了,他们一个老总说了爱咋办... 胜达油是个骗局吗 胜达节能油是什么? 叩解度关于叩解的论述 湿重跟湿重有关的打浆磨片 戴尔XPS M1330-950重要参数 如果到别的单位去面试的话 如果人家问起为什么会选择这家公司而离开另外... 学生会被两个部门同时面试怎么办 小儿急疹怎么办 女儿4个半月,发烧半天,38度,未见咳嗽。查血常规,其中4项低于正常值,请问病情和治疗建议。 宝宝得幼儿急疹眼睛肿怎么办 向日葵远程控制忘记快速码了怎么办 于对那些心情不好就向所有人摆脸色的人你应该怎么对待? 朋友动不动就摆臭脸,你会怎么办? 防风的功效有哪些 麻黄的功效与作用的功能与主治 凌久泽哪一章提到胎记 很多宝宝出生后,屁股上为什么都有一块起眼的乌青? 网上怎么查询车辆抵押状态 处级干部相当于公务员中的什么级别? 杭州美特钢结构有限公司怎么样? 聚餐用公筷餐具消毒真的那么重要吗?出外吃饭见到越来越多人注重这些。 梦见多了一台电风扇 梦见风扇不动 三星galexy note2触屏笔掉了,买一支原装的要多少钱 触屏手机写字笔晚多少钱? 包装的牛奶放在热水里加热可以吗 包装的牛奶放在热水里加热行不行 丝路英雄里3个攻击英雄霸气一点的名字 我这个月只上了六天班就离职了,请问会给我交公积金吗 当月只工作了5天,公司需要为其交公积金吗? 辞职后重新回原公司上班,但当月只上了几天班,公司应该给交社保吗? 离职员工当月出勤多少天公司就要买社保和公积金 2019山东济南市章丘区所属事业单位招聘报名情况统计表(10.29) 灰铁铸件的基本特点 灰铸铁最适于制造哪类铸件?试举车床上十种灰铸铁件名称。并说明不选用其他铸钢的原因。 猎罪图鉴第十集原型 怎么样获得炉石激活码 怎样取得激活码 17173炉石传说抢激活码活动是假的吧? 安装炉石时出现的情况,如何解决? 炉石传说注册表 一个人独自远行的诗句 苹果平板如何注册一个新的? 苹果平板如何注册一个新的? 能帮忙找点播音主持的自备稿件吗~~不要名家名篇~~最好是散文 求高考播音主持专业考试适合男生朗诵的自备稿件. 产后清宫后要注意什么,产后清洗外阴用什么 清宫丸清完阴道里的脏东西怎么洗出去