pythonlist 排序 列表排序方法深度详解
python 里面 list 列表排序主要有两种核心实现方式,第一种是列表自带的 sort 方法,属于原地排序,会直接修改原来的列表,不会返回新列表,第二种是内置 sorted 函数,会生成一个全新排好序的列表,原列表保持不变,两种方法默认都是升序排列,都支持 reverse 参数控制升降序,还可以通过 key 参数自定义排序规则,适合数字列表 字符串列表 字典嵌套列表这类复杂数据,使用列表排序的原因是日常开发经常需要把无序数据按大小 拼音 长度 自定义字段整理成有序序列,比如成绩排名 价格排序 日志时间排序,很多新手容易混淆 sort 和 sorted,最关键差别就是是否改动原列表,原地排序会节省内存,但是原数据会被覆盖,sorted 适合需要保留原始数据的场景,key 参数是高级用法,可以指定每一个元素用来比较的依据,不需要手动改写元素本身,底层排序算法 python 采用 Timsort,属于稳定排序,相等元素排序之后相对位置不会改变,处理混合类型的时候要注意,如果列表里面同时存在数字和字符串,直接排序会触发类型报错,必须提前统一类型或者通过 key 做转换。
基础语法说明
清单如下
1 list.sort 语法 列表.sort (key=None, reverse=False),原地排序,返回值是 None
2 sorted 语法 sorted (可迭代对象,key=None, reverse=False),返回新的排序列表
3 reverse 默认 False 代表升序,设置 True 代表降序
4 key 传入函数,排序的时候会调用这个函数处理每个元素,把返回结果作为比较依据
5 稳定排序,相同值元素原本的先后顺序会保留
sort 和 sorted 对比表
| 对比项目 | list.sort | sorted |
|---|---|---|
| 是否修改原列表 | 原地修改原列表 | 不修改原列表,生成新列表 |
| 返回值 | 返回 None | 返回排好序的新列表 |
| 适用对象 | 只能用于 list 列表 | 支持 list 元组 字典等所有可迭代对象 |
| 内存占用 | 更低 | 需要额外内存存放新列表 |
| 链式调用 | 不方便,因为返回 None | 可以直接链式使用 |
详细使用操作步骤
第一步 准备原始列表,比如 num_list = [5,2,9,1,7]
第二步 使用 sort 升序,执行 num_list.sort (),执行完成原列表直接变成升序
第三步 使用 sort 降序,执行 num_list.sort (reverse=True),列表从大到小排列
第四步 使用 sorted 升序,new_list = sorted (num_list),原列表不变,new_list 是排序结果
第五步 使用 key 自定义排序,比如字符串列表按照长度排序 words = ["apple","hi","python"],words.sort (key=len),按照字符长度从小到大排
第六步 嵌套字典列表排序,例如学生成绩列表,key=lambda x:x ["score"],按照成绩这个字段排序
第七步 多级排序,key 里面可以传入元组,实现先按第一个字段,再按第二个字段排序
第八步 排序之后校验,打印列表查看结果,确认排序逻辑符合预期
常见应用案例
1 数字升序 [3,1,4,2] sort 之后变成 [1,2,3,4]
2 字符串默认排序,按照 ASCII 编码顺序,大写字母排在小写前面
3 字典列表按年龄排序 students.sort (key=lambda s:s ["age"])
4 多级排序,先按分数降序,分数相同再按姓名升序
常见认知误区
第一 误区 list.sort 会返回排好序的新列表,实际返回 None,不能写 a = list.sort () 这种赋值
第二 误区 key 是修改列表里面原始元素,实际 key 只是生成临时比较值,原元素不会改动
第三 误区 所有类型都可以直接排序,数字和字符串混排会报错,类型不一致不能直接比较
第四 误区 reverse 参数是反转列表,reverse 只是排序之后逆序,和单纯反转列表 reverse () 方法不是同一个功能
第五 误区排序不稳定,python Timsort 是稳定排序,相同元素相对位置保留
【常见问题】
问题 1 pythonlist 排序 pythonlist 的 sort 和 sorted 有什么核心区别
回答 1 pythonlist 排序,pythonlist 的 sort 是原地排序直接修改原列表,返回 None,sorted 是生成新排序列表,原列表保持不变,这是 pythonlist 排序最核心的区别。
问题 2 pythonlist 排序 pythonlist 排序怎么实现降序
回答 2 pythonlist 排序,pythonlist 排序实现降序只需要添加 reverse=True 参数,不管是 list.sort 还是 sorted 都支持这个参数,设置之后列表就会从大到小排列。
问题 3 pythonlist 排序 pythonlist 排序的时候 key 参数有什么作用
回答 3 pythonlist 排序,pythonlist 排序里面 key 参数用来指定自定义比较规则,传入函数,根据函数返回值进行比较,适合字典列表 字符串长度这类特殊排序场景。
问题 4 pythonlist 排序 pythonlist 里面数字和字符串混合可以直接排序吗
回答 4 pythonlist 排序,pythonlist 里面数字和字符串混合不能直接排序,执行排序会抛出类型比较错误,需要提前统一元素类型,或者通过 key 参数做类型转换之后再排序。
【免责申明】
本文 pythonlist 排序相关内容属于 Python 基础语法科普,代码示例仅用于学习演示,不同 Python 版本底层 Timsort 排序逻辑保持兼容,复杂业务排序请做好异常判断,本文不替代 Python 官方文档。
相关阅读
-
python 中的 random 函数并不是单独一个函数,它属于 python 内置 random 模块,这个模块提供整套伪随...浏览全文>>
-
冬瓜炒虾仁核心就是把冬瓜切薄片先炒软出水,搭配提前腌制上浆的鲜虾仁大火快炒,成品清淡鲜甜,冬瓜软嫩吸汁...浏览全文>>
-
python 里面 list 列表排序主要有两种核心实现方式,第一种是列表自带的 sort 方法,属于原地排序,会直...浏览全文>>
-
电脑设置动态桌面,Windows 原生系统本身并不直接支持视频动态壁纸,主流方案分为第三方软件实现动态桌面,还...浏览全文>>
-
pvc 管主要材质是聚氯乙烯,英文缩写 PVC,行业最常见的 pvc 管大多属于 PVCU 也就是硬聚氯乙烯,它是以...浏览全文>>
-
家常地瓜饼想要做得好吃,核心就是把蒸熟的地瓜压成泥,趁热加入糯米粉揉成不粘手的面团,分剂压成饼之后小火...浏览全文>>
-
put off 是英语里高频的短语动词,核心含义是推迟延期,同时还具备使反感搪塞等多个义项,它属于可分离式短...浏览全文>>
-
大熊猫最喜欢吃的食物是竹子,竹子占它日常进食总量的百分之九十以上,虽然大熊猫在分类上属于食肉目动物,但...浏览全文>>
-
核心结论 pubgtool 里面的 sg 优化是针对绝地求生的图形渲染优化选项,开启之后会修改游戏渲染相关参数,...浏览全文>>
-
醋泡黑豆想要口感软糯不生硬、没有豆腥味,优先选择熟泡的方式,生泡耗时很长还容易肠胃不适,黑豆一定要提前...浏览全文>>
- 冬瓜炒虾仁 鲜爽清淡家常菜
- 电脑如何设置动态桌面 原生与软件两种方案
- 虫草花鸡汤的家常做法 详细炖煮教程
- ps 人像精修人脸步骤 商业人像精修全流程详解
- ps 剪切蒙版怎么用详细步骤 剪贴蒙版入门到实操教程
- pr 怎么调色 Lumetri 颜色面板调色教程
- protein 的读法 英美音标与发音要点讲解
- pp 棉滤芯多久换一次 更换周期深度说明
- 长春必吃的几家饭店 东北特色口碑老店版
- pos 机用法 基础操作详解
- popularity 可数吗 名词考点详解
- 一斤装白酒多少毫升 换算详解
- 血肠的家常做法煮法 慢火微沸不爆肠
- 蒜泥菠菜 家常清炒做法
- PASSION 中文解释 词义用法全解
- o 型血的性格特点 血型性格学说讲解
- 柿子是水果还是蔬菜
- oppo 怎么换拨号键主题 详细操作教程
- 三七炖鸡的正确做法 温补醇香不苦
- OPPOR9s 机型完整介绍与参数说明
