Python 列表 sort()函数使用详解

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》

sort函数使用详解

sort() 可以对列表进行「排序」

语法

python 复制代码
list.sort( key, reverse )

参数

  • key :(可选)指定排序规则
  • reverse :(可选)升序降序

返回值

  • 返回None,同时将原列表排序。也就是没有返回值

案例:将列表中的元素排序

python 复制代码
list1 = [1, 3, 2, 5]
list1.sort()
print(list1)

输出:

bash 复制代码
[1, 2, 3, 5]

1、升序降序

reverse 参数控制排序的「升序」和「降序」,True表示降序、False表示升序;默认升序reverse=False

python 复制代码
list1 = [1, 3, 2, 5]
list1.sort(reverse=True)
print(list1)
list1.sort(reverse=False)
print(list1)
list1.sort()
print(list1)

输出:

bash 复制代码
[5, 3, 2, 1]
[1, 2, 3, 5]
[1, 2, 3, 5]

2、sort()和sorted()的区别

接收 sort() 的返回值,可以发现是None

python 复制代码
list1 = [1, 3, 2, 5]
list2 = list1.sort()
print(list2)

输出:

bash 复制代码
None

打印一下排序前、后的「内存地址」,可以发现地址没有改变

python 复制代码
list1 = [1, 3, 2, 5]
print(id(list1))
list1.sort()
print(id(list1))

输出:

bash 复制代码
2361470487744
2361470487744

sort() 的设计思想就是「修改」原列表,而不是返回新的列表;

它不会创建新的列表,从而节省「效率」;

当然,这也意味着原列表被修改了,使用时要留意这一点;
sorted() 是 sort() 的扩展函数,可以对列表的元素排序,同时不会修改原列表。

python 复制代码
list1 = [1, 3, 2, 5]
list2 = sorted(list1)
print(list1)
print(list2)

输出:

bash 复制代码
[1, 3, 2, 5]
[1, 2, 3, 5]

从结果可以看到, sorted() 创建了新的列表,用来保存排序后的列表。

3、切片排序

将原列表「切片」复制给新列表,再对新列表排序,同样可以实现排序且不改变原列表。

python 复制代码
list1 = [1, 3, 2, 5]
list2 = list1[:]
list2.sort()
print(list1)
print(list2)

输出:

bash 复制代码
[1, 3, 2, 5]
[1, 2, 3, 5]

直接「赋值」的方式是不行的,因为赋值的话,两个列表会指向同一个内存地址,原列表会同步变化。

bash 复制代码
list1 = [1, 3, 2, 5]
list2 = list1
list2.sort()
print(list1)
print(list2)

输出:

bash 复制代码
[1, 2, 3, 5]
[1, 2, 3, 5]

4、指定排序规则

key 参数可以指定排序「规则」

4.1、按字符串长度排序

对于元素全是字符串的「列表」,可以按照字符串的「长度」来排序

python 复制代码
list1 = ['aaaaa', 'aa', 'aaaa', 'a']
list1.sort(key=len)
print(list1)

输出:

bash 复制代码
['a', 'aa', 'aaaa', 'aaaaa']

本质上是利用字符串的 len() 函数计算长度,再排序,如果遇到 int 这列没有 len() 函数的元素,就会报错 TypeError: object of type 'int' has no len()。

4.2、按第二个字符排序

对于元素全是字符串的列表,可以按照元素的第几个「字符」排序。

python 复制代码
list1 = ['cb', 'fa', 'zd', 'ec']
list1.sort(key=lambda x: x[1])
print(list1)

输出:

bash 复制代码
['fa', 'cb', 'ec', 'zd']

需要注意的是,所有元素的字符长度都要够数,比如元素只有1个字符,却按照第2个字符排序,函数找不到第2个字符,肯定会报错 IndexError: string index out of range

4.3、查找第n大的元素

先降序,再按照「索引」取值,就能获取列表中第一大的值或第二大的值等。

python 复制代码
list1 = [4, 3, 9, 6, 1]
list1.sort(reverse=True)
print('最大的元素:', list1[0])
print('第二大的元素:', list1[1])

输出:

bash 复制代码
最大的元素: 9
第二大的元素: 6

5、其他类型排序

sort() 只能对列表排序,而 sorted() 能对可迭代对象排序;所以,字符串、元组、字典等类型想排序,可以用 sorted()

python 复制代码
str1 = "312"
print(sorted(str1))

tuple1 = (5, 1, 3)
print(sorted(tuple1))

dict1 = {"key1": 1, "key2": 2}
print(sorted(dict1))

输出:

bash 复制代码
['1', '2', '3']
[1, 3, 5]
['key1', 'key2']

从输出结果可以发现,字符串、元组、字典类型排序后,返回的是列表类型;并且字典只对键排序,不对值排序。

相关推荐
天涯海风17 分钟前
检索增强生成(RAG) 缓存增强生成(CAG) 生成中检索(RICHES) 知识库增强语言模型(KBLAM)
人工智能·缓存·语言模型
lxmyzzs1 小时前
基于深度学习CenterPoint的3D目标检测部署实战
人工智能·深度学习·目标检测·自动驾驶·ros·激光雷达·3d目标检测
网络安全大学堂2 小时前
【黑客技术零基础入门】PHP环境搭建、安装Apache、安装与配置MySQL(非常详细)零基础入门到精通,收藏这一篇就够
安全·web安全·计算机·网络安全·黑客·信息安全·程序员
跟着珅聪学java2 小时前
Apache OpenNLP简介
人工智能·知识图谱
AwhiteV2 小时前
利用图数据库高效解决 Text2sql 任务中表结构复杂时占用过多大模型上下文的问题
数据库·人工智能·自然语言处理·oracle·大模型·text2sql
念念01073 小时前
数学建模竞赛中评价类相关模型
python·数学建模·因子分析·topsis
Black_Rock_br3 小时前
AI on Mac, Your Way!全本地化智能代理,隐私与性能兼得
人工智能·macos
云天徽上3 小时前
【数据可视化-94】2025 亚洲杯总决赛数据可视化分析:澳大利亚队 vs 中国队
python·信息可视化·数据挖掘·数据分析·数据可视化·pyecharts
☺����3 小时前
实现自己的AI视频监控系统-第一章-视频拉流与解码2
开发语言·人工智能·python·音视频
fsnine3 小时前
机器学习——数据清洗
人工智能·机器学习