Python之sort用法
原创大约 3 分钟
Python之sort用法
Python的
sort()
方法和sorted()
函数用于对列表进行排序。sort()
方法是在原地对列表进行排序,而sorted()
函数返回一个新的已排序列表。以下是详细的用法和示例。
1. 基本用法
使用 sort()
方法
sort()
方法会对列表进行原地排序(in-place),不会返回新列表。
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()
print(numbers) # Output: [1, 2, 5, 5, 6, 9]
使用 sorted()
函数
sorted()
函数会返回一个新的已排序列表,不会改变原列表。
numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # Output: [1, 2, 5, 5, 6, 9]
print(numbers) # Output: [5, 2, 9, 1, 5, 6] (原列表未改变)
2. 降序排序
可以通过 reverse=True
参数实现降序排序。
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort(reverse=True)
print(numbers) # Output: [9, 6, 5, 5, 2, 1]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # Output: [9, 6, 5, 5, 2, 1]
3. 使用 key
参数
key
参数允许我们传递一个函数或 lambda
表达式,以自定义排序规则。
对字符串按长度排序
words = ["apple", "banana", "cherry", "date"]
words.sort(key=len)
print(words) # Output: ['date', 'apple', 'banana', 'cherry']
使用 lambda
表达式进行自定义排序
例如,对元组列表按第二个元素排序:
pairs = [(1, 2), (3, 1), (5, 0), (2, 3)]
pairs.sort(key=lambda x: x[1])
print(pairs) # Output: [(5, 0), (3, 1), (1, 2), (2, 3)]
4. 稳定排序
Python 的排序算法是稳定的,这意味着当两个元素具有相同键值时,它们在排序后会保持原来的相对顺序。
people = [('Alice', 25), ('Bob', 20), ('Charlie', 25), ('David', 20)]
people.sort(key=lambda x: x[1])
print(people)
# Output: [('Bob', 20), ('David', 20), ('Alice', 25), ('Charlie', 25)]
5. 多级排序
可以通过多次使用 sort()
或 sorted()
来实现多级排序。例如,先按第一元素排序,再按第二元素排序:
data = [(1, 3), (1, 2), (2, 2), (2, 3)]
data.sort(key=lambda x: x[1]) # 先按第二元素排序
data.sort(key=lambda x: x[0]) # 再按第一元素排序
print(data)
# Output: [(1, 2), (1, 3), (2, 2), (2, 3)]
6. 复杂数据结构排序
对于复杂的数据结构,例如嵌套列表或对象,可以使用 key
参数提供自定义的排序逻辑。例如,按嵌套列表的第二个元素进行排序:
students = [["Alice", 85], ["Bob", 75], ["Charlie", 95]]
students.sort(key=lambda x: x[1])
print(students)
# Output: [['Bob', 75], ['Alice', 85], ['Charlie', 95]]
7. 与 operator
模块结合使用
operator
模块提供了许多有用的函数,可以与 sort()
和 sorted()
结合使用。例如,使用 operator.itemgetter
对字典列表按某个键排序:
from operator import itemgetter
students = [{'name': 'Alice', 'grade': 'B'},
{'name': 'Bob', 'grade': 'A'},
{'name': 'Charlie', 'grade': 'C'}]
sorted_students = sorted(students, key=itemgetter('grade'))
# 效果一样
sorted_students_2 = sorted(students, key=lambda x: x['grade'])
print(sorted_students)
print(sorted_students_2)
# Output: [{'name': 'Bob', 'grade': 'A'}, {'name': 'Alice', 'grade': 'B'}, {'name': 'Charlie', 'grade': 'C'}]
注意事项
sorted()
函数返回一个新的排序后的列表,不修改原对象。- 可以接受任何可迭代对象作为参数。
- 可以通过
key
参数指定排序的关键函数。 - 可以通过
reverse
参数指定是否反转排序顺序,默认为False
。 - 注意排序稳定性,相等的元素保持原有顺序。
写在最后
Python 的
sort()
方法和sorted()
函数提供了强大且灵活的排序功能,能够满足各种排序需求。通过结合使用key
参数、自定义函数或lambda
表达式,可以实现复杂的数据排序逻辑。