返回
Python列表排序秘籍:list.sort方法和sorted函数精解
后端
2023-06-26 08:50:43
数据排序艺术:使用 Python 中的 list.sort() 和 sorted()
在数据分析和编程中,数据排序是一种至关重要的技术,可用于整理、筛选和分析数据。Python 提供了广泛的数据排序选项,包括 list.sort() 方法和 sorted() 函数。在这篇文章中,我们将深入探讨这些排序工具及其在 Python 中的应用。
list.sort() 方法:原列表排序
list.sort() 方法直接对原列表进行排序,不需要创建新的列表对象。其语法格式为:
list.sort(key=None, reverse=False)
- key: 可选排序键函数,用于自定义排序规则。
- reverse: 布尔值,指示是否按降序排列。
示例:
# 对数字列表升序排序
lst = [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
lst.sort()
print(lst)
输出:
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
sorted() 函数:创建新列表排序
sorted() 函数返回一个新的已排序列表,而不会修改原列表。其语法格式为:
sorted(iterable, key=None, reverse=False)
- iterable: 可迭代对象,如列表、元组、字符串等。
- key: 可选排序键函数,用于自定义排序规则。
- reverse: 布尔值,指示是否按降序排列。
示例:
# 按年龄升序排序字典列表
students = [{'name': 'Tom', 'age': 18, 'gender': 'male'},
{'name': 'Lily', 'age': 19, 'gender': 'female'},
{'name': 'Jack', 'age': 20, 'gender': 'male'}]
sorted_students = sorted(students, key=lambda x: x['age'])
print(sorted_students)
输出:
[{‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘male’}, {‘name’: ‘Lily’, ‘age’: 19, ‘gender’: ‘female’}, {‘name’: ‘Jack’, ‘age’: 20, ‘gender’: ‘male’}]
总结与应用
list.sort() 方法和 sorted() 函数是 Python 中常用的列表排序工具,它们具有不同的特点和应用场景。list.sort() 方法直接对原列表进行排序,适合快速对列表进行排序;而 sorted() 函数则创建一个新的已排序列表,适合对列表进行排序并保持原列表不变。
在实际应用中,我们可以根据具体需求选择合适的方法:
- 如果需要对原列表进行排序,则可以使用 list.sort() 方法。
- 如果需要创建一个新的已排序列表,而不需要修改原列表,则可以使用 sorted() 函数。
- 如果需要对复杂数据结构(如字典或对象)进行排序,则可以使用 sorted() 函数和 lambda 表达式定义自定义排序键函数。
常见问题解答
1. 如何对列表中的字符串按字母顺序排序?
lst = ['apple', 'banana', 'cherry', 'dog', 'elephant']
lst.sort()
print(lst)
2. 如何按字典中的特定键对字典列表进行排序?
students = [{'name': 'Tom', 'age': 18},
{'name': 'Lily', 'age': 19},
{'name': 'Jack', 'age': 20}]
sorted_students = sorted(students, key=lambda x: x['age'])
print(sorted_students)
3. 如何对嵌套列表进行排序?
lst = [['apple', 1], ['banana', 2], ['cherry', 3]]
lst.sort(key=lambda x: x[1])
print(lst)
4. 如何对列表中包含 None 值的元素进行排序?
使用 sorted() 函数并指定 key=lambda x: x or 0 来将 None 值视为 0。
lst = [1, 2, 3, None, 5]
lst.sort(key=lambda x: x or 0)
print(lst)
5. 如何自定义排序规则?
使用排序键函数。例如,要按字符串长度对列表中的字符串进行排序,可以使用以下键函数:
def str_len(s):
return len(s)
lst = ['apple', 'banana', 'cherry', 'dog', 'elephant']
lst.sort(key=str_len)
print(lst)