Python排序大揭秘:sort()和sorted()到底怎么选?

Python排序大揭秘:sort()和sorted()到底怎么选?今天我们来聊聊 Python 里最常用的功能之一 排序 你有没有遇到过这样的问题 一堆数据怎么快速排序 sort 和 sorted 有什么区别 如何实现 先按总分排 再按语文成绩排 这种复杂排序 别急 今天我们就用最通俗的语言 带你彻底搞懂

欢迎大家来到IT世界,在知识的湖畔探索吧!

Python排序大揭秘:sort()和sorted()到底怎么选?



欢迎大家来到IT世界,在知识的湖畔探索吧!

今天我们来聊聊Python里最常用的功能之一——排序

你有没有遇到过这样的问题:

  • 一堆数据怎么快速排序?
  • sort()和sorted()有什么区别?
  • 如何实现“先按总分排,再按语文成绩排”这种复杂排序?

别急,今天我们就用最通俗的语言,带你彻底搞懂Python排序!


1. sort() vs sorted():谁才是排序之王?

Python提供了两种排序方式:

  • list.sort()霸道总裁型,直接修改原列表,不返回新列表。
  • sorted()温柔体贴型,返回新列表,不改变原数据。

举个栗子

nums = [3, 1, 4, 2] # sorted():给你一个新列表,原数据不变 sorted_nums = sorted(nums)  # [1, 2, 3, 4] print(nums)  # 还是 [3, 1, 4, 2] # sort():直接改掉原列表 nums.sort()  # nums变成 [1, 2, 3, 4] print(nums)  # [1, 2, 3, 4]

欢迎大家来到IT世界,在知识的湖畔探索吧!

怎么选?

  • 如果想保留原数据,用sorted()。
  • 如果不关心原数据,用sort()(更快,省内存)。

2. 进阶玩法:自定义排序规则

Python的排序最强大的地方在于——你可以告诉它怎么排!

按字符串长度排序

欢迎大家来到IT世界,在知识的湖畔探索吧!words = ["apple", "banana", "cherry", "date"] sorted_words = sorted(words, key=lambda x: len(x))  # 按长度升序 # 结果:['date', 'apple', 'banana', 'cherry']

按字典的某个值排序

users = [     {"name": "Alice", "age": 25},     {"name": "Bob", "age": 30},     {"name": "Charlie", "age": 20}, ] # 按年龄升序排序 sorted_users = sorted(users, key=lambda x: x["age"]) # 结果:Charlie(20) → Alice(25) → Bob(30)

3. 终极挑战:多级排序

问题:期末考试成绩出来了,要怎么排?

  • 规则1:按总分从高到低
  • 规则2:如果总分一样,按语文成绩从高到低
  • 规则3:如果总分和语文都一样,按学号从小到大

Python代码

欢迎大家来到IT世界,在知识的湖畔探索吧!students = [     [1, 90, 80, 70],  # [学号, 语文, 数学, 英语]     [2, 85, 95, 80],  # 总分=85+95+80=260     [3, 90, 80, 70],  # 总分=90+80+70=240     [4, 80, 70, 90],  # 总分=80+70+90=240 ] # 关键代码:lambda魔法! sorted_students = sorted(     students,     key=lambda x: (-(x[1] + x[2] + x[3]), -x[1], x[0]) )

解释

  • -(x[1]+x[2]+x[3]) → 总分降序(加负号)
  • -x[1] → 语文降序
  • x[0] → 学号升序

运行结果

学号2(总分260)→ 学号1(总分240,语文90)→ 学号3(总分240,语文90)→ 学号4(总分240,语文80)

4. 背后的黑科技:Timsort算法

Python的排序之所以快,是因为它用了Timsort算法(混合了归并排序和插入排序):

  • 最优情况:O(n)(数据已经部分有序)
  • 平均情况:O(n log n)(和快速排序一样快)
  • 稳定排序(相同元素不会乱序)

适用场景

  • 小数据 → 插入排序(快)
  • 大数据 → 归并排序(稳定)

5. 总结

功能

代码示例

适用场景

基本排序

sorted(nums)

简单升序排序

降序排序

sorted(nums, reverse=True)

从大到小

自定义排序

key=lambda x: len(x)

按字符串长度等

多级排序

key=lambda x: (-总分, -语文, 学号)

复杂规则排序

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/133865.html

(0)
上一篇 9小时前
下一篇 12分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信