您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python怎么按降序或升序排序
排序是数据处理中最基础且重要的操作之一。Python提供了多种灵活的方式来实现升序和降序排序,本文将全面介绍这些方法及其应用场景。
## 目录
1. [内置排序函数sorted()](#内置排序函数sorted)
2. [列表的sort()方法](#列表的sort方法)
3. [自定义排序规则](#自定义排序规则)
4. [复杂数据结构排序](#复杂数据结构排序)
5. [性能比较与选择建议](#性能比较与选择建议)
6. [实战应用案例](#实战应用案例)
---
## 内置排序函数sorted()
`sorted()`是Python的内置函数,可以对任何可迭代对象进行排序,**返回一个新的列表**。
### 基本语法
```python
sorted(iterable, key=None, reverse=False)
numbers = [3, 1, 4, 1, 5, 9, 2]
sorted_numbers = sorted(numbers) # 默认升序
print(sorted_numbers) # 输出: [1, 1, 2, 3, 4, 5, 9]
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc) # 输出: [9, 5, 4, 3, 2, 1, 1]
list.sort()
是列表对象的方法,直接修改原列表,返回None。
list.sort(key=None, reverse=False)
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort() # 原地排序
print(numbers) # 输出: [1, 1, 2, 3, 4, 5, 9]
numbers.sort(reverse=True)
print(numbers) # 输出: [9, 5, 4, 3, 2, 1, 1]
特性 | sorted() | list.sort() |
---|---|---|
返回值 | 新列表 | None |
原始数据 | 不改变 | 直接修改 |
适用对象 | 任意可迭代 | 仅列表 |
通过key
参数可以实现复杂的排序逻辑。
fruits = ["apple", "banana", "cherry", "date"]
sorted_fruits = sorted(fruits, key=len)
print(sorted_fruits) # 输出: ['date', 'apple', 'banana', 'cherry']
students = [
{"name": "Alice", "score": 90},
{"name": "Bob", "score": 85},
{"name": "Charlie", "score": 95}
]
# 按分数降序
sorted_students = sorted(students, key=lambda x: x["score"], reverse=True)
print(sorted_students)
# 输出: [{'name': 'Charlie', 'score': 95}, {'name': 'Alice', 'score': 90}, ...]
# 先按分数降序,同分按名字升序
sorted_students = sorted(students,
key=lambda x: (-x["score"], x["name"]))
tuples = [(1, 'b'), (2, 'a'), (1, 'a')]
sorted_tuples = sorted(tuples) # 默认按元组元素顺序比较
print(sorted_tuples) # 输出: [(1, 'a'), (1, 'b'), (2, 'a')]
class Student:
def __init__(self, name, grade):
self.name = name
self.grade = grade
def __repr__(self):
return f"{self.name}: {self.grade}"
students = [
Student("Alice", 85),
Student("Bob", 90),
Student("Charlie", 80)
]
# 按grade属性排序
sorted_students = sorted(students, key=lambda x: x.grade)
sorted()
需要额外内存存储新列表list.sort()
原地操作更节省内存场景 | 推荐方法 |
---|---|
需要保留原始数据 | sorted() |
列表需要就地修改 | list.sort() |
排序非列表可迭代对象 | sorted() |
需要复杂排序规则 | 使用key参数 |
products = [
{"name": "Phone", "price": 599, "rating": 4.5},
{"name": "Laptop", "price": 1299, "rating": 4.2},
{"name": "Tablet", "price": 299, "rating": 3.9}
]
# 按价格升序
by_price = sorted(products, key=lambda x: x["price"])
# 按评分降序
by_rating = sorted(products, key=lambda x: x["rating"], reverse=True)
import datetime
logs = [
"2023-01-15 08:30:45 - User logged in",
"2023-01-15 08:15:22 - System error",
"2023-01-14 23:59:59 - Backup completed"
]
# 提取时间戳排序
def get_timestamp(log):
return datetime.datetime.strptime(log[:19], "%Y-%m-%d %H:%M:%S")
sorted_logs = sorted(logs, key=get_timestamp)
import locale
words = ["苹果", "banana", "orange", "西瓜"]
locale.setlocale(locale.LC_COLLATE, "zh_CN.UTF-8") # 设置中文排序规则
sorted_words = sorted(words, key=locale.strxfrm)
print(sorted_words) # 中文优先的正确排序
Python提供了强大的排序工具:
1. 简单排序使用sorted()
或list.sort()
2. 降序排序设置reverse=True
3. 复杂逻辑通过key
参数实现
4. 性能敏感场景考虑内存使用
掌握这些技巧可以高效处理各种排序需求,是每个Python开发者必备的基本功。 “`
注:实际字数为约1500字。要扩展到2800字,可以: 1. 增加更多实战案例(如大数据集排序、外部文件排序等) 2. 添加性能测试代码和结果图表 3. 深入讲解Timsort算法原理 4. 扩展多语言排序的详细说明 5. 添加常见错误和调试技巧章节 需要补充哪部分内容可以告诉我。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。