
Python列表排序 list.sort方法和内置函数sorted
发布日期:2021-05-12 20:11:32
浏览次数:21
分类:精选文章
本文共 2267 字,大约阅读时间需要 7 分钟。
Python列表排序方法有两种常用的方式:list.sort()和内置函数sorted(). 它们的使用场景和行为有显著的不同,理解这两种方法的特性对于有效地完成排序任务至关重要。
1. list.sort()方法
list.sort()是一个就地排序方法,它直接将列表修改而不返回新列表。这种方法将修改传递给调用者,通过返回None来指示操作完成。以下是使用list.sort()的示例:
list_a = [1, 2, 8, 3, 7, 9, 5, 7]list_a.sort()print("list_a: ", list_a)
运行结果:
list_a: [1, 2, 3, 5, 7, 7, 8, 9]
由于list.sort()没有返回值,调用者可以知道原列表已经被修改。如果需要链式调用或返回新列表,建议使用sorted()函数进行处理。
2. sorted内置函数
sorted()是一个内置函数,它返回一个新列表作为排序结果,而不是修改原始数据。它广泛接受任何可迭代对象,处理能力强于list.sort(),尤其在处理不同数据类型或生成器时表现优异。以下是sorted()的示例:
list_c = [1, 2, 8, 3, 7, 9, 5, 7]list_d = sorted(list_c)print("list_c: ", list_c)print('list_d: ', list_d)
运行结果:
list_c: [1, 2, 8, 3, 7, 9, 5, 7]list_d: [1, 2, 3, 5, 7, 7, 8, 9]
通过该示例可以看出,使用sorted()不会改变原始列表,而是返回一个新的排序后列表,非常适合需要同时保留原数据和排序结果的情况。
3. 关键字参数 key 和 reverse
无论是list.sort()还是sorted(),都支持两个关键字参数:key和reverse。
- key参数:允许调用一个函数,将这个函数作用于序列中的每个元素,生成比较的依据。例如:
phone = ('HUAWEI', 'OPPO', 'MI', 'MEIZU', 'VIVO')phone_list = sorted(phone, key=len)print(phone_list)
输出结果展示了以字符串长度作为排序依据,得到按长度排序后的列表。
- reverse参数:指定排序顺序为降序。例如:
phone_list_re = sorted(phone, key=len, reverse=True)print(phone_list_re)
这样,原按升序排列的列表会变成降序排列。
4. 两种方法的对比
-
原列表修改情况:
- list.sort(): 原始列表被修改。
- sorted(): 原始列表保持不变。
-
返回值:
- list.sort(): 返回None。
- sorted(): 返回新列表。
-
性能:
- 对于小型数据,两者的性能差异不大,但随着数据规模增大,list.sort()可能更高效。
5. 示例应用场景
1. 生成排序后的新列表
str_e = 'python'list_e = sorted(str_e)print(list_e)# 输出: ['h', 'n', 'o', 'p', 't', 'y']
2. 链式调用
通过sorted()和列表推导式可以实现链式调用:
str_f = '-'.join(sorted(str_e)).upper().split('-')print(str_f)# 输出: ['H', 'N', 'O', 'P', 'T', 'Y']
6. 综合练习
# 示例1: 使用list.sort()list_test = [3, 1, 4]list_test.sort()print("排序后的列表:", list_test)# 输出: [1, 3, 4]# 示例2: 使用sorted()sorted_list = sorted(list_test)print("生成的新列表:", sorted_list)# 输出: [1, 3, 4]# 示例3: 使用key和reverse参数sort phone by length:phone = ['HUAWEI', 'OPPO', 'MEIZU', 'VIVO', 'MI']sorted_phone = sorted(phone, key=len)print("按长度排序的列表:", sorted_phone)# 输出: ['MI', 'OPPO', 'VIVO', 'MEIZU', 'HUAWEI']排序后的列表按长度降序:sorted_phone_desc = sorted(phone, key=len, reverse=True)print("按长度降序排序的列表:", sorted_phone_desc)# 输出: ['HUAWEI', 'MEIZU', 'OPPO', 'VIVO', 'MI']
7. 总结
在实际编码时,需要根据具体需求选择合适的方法。如果需要保持原始列表不变,或者需要对非列表数据进行处理,sorted()是一种更灵活且安全的选择。如果对性能要求较高且不需要保留原始数据,list.sort()是更合适的选择。通过理解key和reverse参数,可以进一步定制排序逻辑,满足更多样化的应用需求。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年05月02日 14时18分17秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
结构体内存对齐——2
2019-03-11
从STM32的位带操作重谈嵌入式中寻址与对齐的理解
2019-03-11
小程序提交新数据后如何返回上一页并刷新数据?
2019-03-11
qt c++实现的ai贪吃蛇吃满屏幕,超详细!(二)ai的具体实现
2019-03-11
postman怎么设置cookie共享
2019-03-11
oracle中duplicate column name异常处理
2019-03-11
linux 查看log日志相关命令
2019-03-11
linux 脚本 crontab 定时删除清理日志
2019-03-11
实用的 s t l
2019-03-11
IDEA 2019 安装 mybatis-plus插件
2019-03-11
JSON、JSONObject、JavaBean三者的相互转换
2019-03-11
JS 判断空字符串
2019-03-11
div 实现光标悬停变成手型
2019-03-11
vue项目 npm ERR! missing script: dev
2019-03-11
layer.confirm 无效
2019-03-11
Java 回调机制
2019-03-11
C++全局参数重复定义
2019-03-11
明明获取权限成功,为什么相机还是黑屏?
2019-03-11
Java文件编译运行流程
2019-03-11