Python内置排序函数sorted()用法及示例代码详解

原创 2025-06-25 09:44:22编程技术
400

在Python编程中,排序是一个常见的需求。Python内置的sorted()函数提供了一种简单而强大的方式来对可迭代对象进行排序。本文ZHANID工具网将详细介绍sorted()函数的用法,并通过示例代码展示其在实际编程中的应用。

一、sorted()函数的基本用法

sorted()函数的基本语法如下:

sorted(iterable, key=None, reverse=False)

参数说明

  • iterable:必需参数,表示要排序的可迭代对象,如列表、元组、字符串等。

  • key:可选参数,用于指定一个函数(或其他可调用对象),该函数将被应用于可迭代对象的每个元素上,并根据函数的返回值进行排序。默认情况下,不使用key函数,直接对元素本身进行排序。

  • reverse:可选参数,用于指定排序的顺序。如果设置为True,则按降序排序;如果设置为False(默认),则按升序排序。

返回值

sorted()函数返回一个新的已排序列表,而不会修改原始的可迭代对象。

二、基本排序示例

示例1:对列表进行升序排序

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = sorted(numbers)
print("原始列表:", numbers)
print("升序排序后的列表:", sorted_numbers)

输出

原始列表: [3, 1, 4, 1, 5, 9, 2, 6]
升序排序后的列表: [1, 1, 2, 3, 4, 5, 6, 9]

示例2:对列表进行降序排序

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers_desc = sorted(numbers, reverse=True)
print("原始列表:", numbers)
print("降序排序后的列表:", sorted_numbers_desc)

输出

原始列表: [3, 1, 4, 1, 5, 9, 2, 6]
降序排序后的列表: [9, 6, 5, 4, 3, 2, 1, 1]

三、使用key参数进行自定义排序

示例3:根据字符串长度排序

words = ["apple", "banana", "cherry", "date", "elderberry"]
sorted_words_by_length = sorted(words, key=len)
print("原始列表:", words)
print("按字符串长度排序后的列表:", sorted_words_by_length)

输出

原始列表: ['apple', 'banana', 'cherry', 'date', 'elderberry']
按字符串长度排序后的列表: ['date', 'apple', 'banana', 'cherry', 'elderberry']

示例4:根据元组的第二个元素排序

tuples = [(1, 'one'), (3, 'three'), (2, 'two'), (4, 'four')]
sorted_tuples_by_second_element = sorted(tuples, key=lambda x: x[1])
print("原始列表:", tuples)
print("按元组的第二个元素排序后的列表:", sorted_tuples_by_second_element)

输出

原始列表: [(1, 'one'), (3, 'three'), (2, 'two'), (4, 'four')]
按元组的第二个元素排序后的列表: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

在这个示例中,我们使用了lambda函数作为key参数,该函数接受一个元组x,并返回元组的第二个元素x[1]sorted()函数根据这个返回值对元组进行排序。

示例5:根据字典的某个键排序

students = [
    {'name': 'Alice', 'age': 20, 'score': 85},
    {'name': 'Bob', 'age': 22, 'score': 90},
    {'name': 'Charlie', 'age': 19, 'score': 78}
]

# 按年龄排序
sorted_students_by_age = sorted(students, key=lambda x: x['age'])
print("按年龄排序后的学生列表:")
for student in sorted_students_by_age:
    print(student)

# 按分数排序
sorted_students_by_score = sorted(students, key=lambda x: x['score'], reverse=True)
print("\n按分数降序排序后的学生列表:")
for student in sorted_students_by_score:
    print(student)

输出

按年龄排序后的学生列表:
{'name': 'Charlie', 'age': 19, 'score': 78}
{'name': 'Alice', 'age': 20, 'score': 85}
{'name': 'Bob', 'age': 22, 'score': 90}

按分数降序排序后的学生列表:
{'name': 'Bob', 'age': 22, 'score': 90}
{'name': 'Alice', 'age': 20, 'score': 85}
{'name': 'Charlie', 'age': 19, 'score': 78}

在这个示例中,我们使用了lambda函数作为key参数,分别根据字典的'age''score'键对学生进行排序。

python.webp

四、对其他可迭代对象进行排序

示例6:对字符串进行排序

text = "hello"
sorted_text = sorted(text)
print("原始字符串:", text)
print("排序后的字符列表:", sorted_text)
print("排序后的字符串:", ''.join(sorted_text))  # 将列表转换回字符串

输出

原始字符串: hello
排序后的字符列表: ['e', 'h', 'l', 'l', 'o']
排序后的字符串: ehllo

示例7:对元组进行排序

numbers_tuple = (3, 1, 4, 1, 5, 9, 2, 6)
sorted_numbers_tuple = sorted(numbers_tuple)
print("原始元组:", numbers_tuple)
print("排序后的列表:", sorted_numbers_tuple)

输出

原始元组: (3, 1, 4, 1, 5, 9, 2, 6)
排序后的列表: [1, 1, 2, 3, 4, 5, 6, 9]

五、高级排序技巧

示例8:多级排序

data = [
    {'name': 'Alice', 'age': 20, 'score': 85},
    {'name': 'Bob', 'age': 22, 'score': 90},
    {'name': 'Charlie', 'age': 19, 'score': 85},
    {'name': 'David', 'age': 20, 'score': 92}
]

# 先按年龄排序,年龄相同的按分数降序排序
sorted_data = sorted(data, key=lambda x: (x['age'], -x['score']))
print("多级排序后的学生列表:")
for item in sorted_data:
    print(item)

输出

多级排序后的学生列表:
{'name': 'Charlie', 'age': 19, 'score': 85}
{'name': 'Alice', 'age': 20, 'score': 85}
{'name': 'David', 'age': 20, 'score': 92}
{'name': 'Bob', 'age': 22, 'score': 90}

在这个示例中,我们使用了元组作为key函数的返回值,实现了多级排序。首先按'age'键排序,年龄相同的则按'score'键的负值(即降序)排序。

示例9:使用operator模块简化代码

对于复杂的key函数,可以使用operator模块来简化代码。operator模块提供了一些函数,如itemgetterattrgetter,可以方便地用于排序。

from operator import itemgetter

students = [
    {'name': 'Alice', 'age': 20, 'score': 85},
    {'name': 'Bob', 'age': 22, 'score': 90},
    {'name': 'Charlie', 'age': 19, 'score': 78}
]

# 使用itemgetter按年龄排序
sorted_students_by_age = sorted(students, key=itemgetter('age'))
print("使用itemgetter按年龄排序后的学生列表:")
for student in sorted_students_by_age:
    print(student)

输出

使用itemgetter按年龄排序后的学生列表:
{'name': 'Charlie', 'age': 19, 'score': 78}
{'name': 'Alice', 'age': 20, 'score': 85}
{'name': 'Bob', 'age': 22, 'score': 90}

六、注意事项

  1. 不修改原始数据sorted()函数返回一个新的已排序列表,而不会修改原始的可迭代对象。如果需要修改原始列表,可以使用列表的sort()方法。

  2. 性能考虑:对于大型数据集,排序操作可能会消耗较多的内存和时间。在处理大型数据集时,需要考虑性能优化,如使用更高效的排序算法或分批处理数据。

  3. key函数的效率key函数会在排序过程中被多次调用,因此应确保key函数的实现是高效的。避免在key函数中进行复杂的计算或I/O操作。

七、总结

sorted()函数是Python中一个强大而灵活的排序工具。通过合理使用keyreverse参数,可以实现对各种复杂数据结构的自定义排序。无论是简单的升序或降序排序,还是根据多个条件进行的多级排序,sorted()函数都能轻松应对。希望本文的介绍和示例代码能帮助读者更好地理解和使用sorted()函数。

Python
THE END
战地网
频繁记录吧,生活的本意是开心

相关推荐

Python yield 用法大全:轻松掌握生成器与迭代器设计
在Python中,yield关键字是构建生成器的核心工具,它通过状态保存机制实现了高效的内存管理和惰性计算。与传统的迭代器实现相比,yield能将迭代器设计从复杂的类定义简化为直...
2025-09-15 编程技术
536

基于Python的旅游数据分析可视化系统【2026最新】
本研究成功开发了基于Python+Django+Vue+MySQL的旅游数据分析可视化系统,实现了从数据采集到可视化展示的全流程管理。系统采用前后端分离架构,前端通过Vue框架构建响应式界...
2025-09-13 编程技术
563

手把手教你用Python读取txt文件:从基础到实战的完整教程
Python作为数据处理的利器,文件读写是其基础核心功能。掌握txt文件读取不仅能处理日志、配置文件等常见场景,更是理解Python文件I/O的基石。本文ZHANID工具网将从基础语法到...
2025-09-12 编程技术
538

Python Flask 入门指南:从零开始搭建你的第一个 Web 应用
Flask作为 Python 中最轻量级且灵活的 Web 框架之一,特别适合初学者快速上手 Web 应用开发。本文将带你一步步了解如何在本地环境中安装 Flask、创建一个简单的 Web 应用,并...
2025-09-11 编程技术
527

Python 如何调用 MediaPipe?详细安装与使用指南
MediaPipe 是 Google 开发的跨平台机器学习框架,支持实时处理视觉、音频和文本数据。本文脚本之家将系统讲解 Python 环境下 MediaPipe 的安装、配置及核心功能调用方法,涵盖...
2025-09-10 编程技术
572

基于Python开发一个利率计算器的思路及示例代码
利率计算是金融领域的基础需求,涵盖贷款利息、存款收益、投资回报等场景。传统计算依赖手工公式或Excel表格,存在效率低、易出错等问题。Python凭借其简洁的语法和强大的数学...
2025-09-09 编程技术
510