如何在 Python 编程中使用内置的 sorted() 函数

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Python 的内置 sorted() 函数是在程序中对数据进行排序的强大工具。在本教程中,我们将探讨使用 sorted() 函数的基础知识以及高级排序技术,以帮助你掌握这项重要的 Python 技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/DataStructuresGroup -.-> python/dictionaries("Dictionaries") python/DataStructuresGroup -.-> python/sets("Sets") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") subgraph Lab Skills python/lists -.-> lab-417843{{"如何在 Python 编程中使用内置的 sorted() 函数"}} python/tuples -.-> lab-417843{{"如何在 Python 编程中使用内置的 sorted() 函数"}} python/dictionaries -.-> lab-417843{{"如何在 Python 编程中使用内置的 sorted() 函数"}} python/sets -.-> lab-417843{{"如何在 Python 编程中使用内置的 sorted() 函数"}} python/build_in_functions -.-> lab-417843{{"如何在 Python 编程中使用内置的 sorted() 函数"}} end

sorted() 函数简介

sorted() 函数是 Python 中的一个内置函数,它允许你对序列(如列表、元组或字符串)中的元素进行排序。它是一个多功能的函数,可以用于以各种方式对数据进行排序,使其成为许多编程任务中的一个有价值的工具。

什么是 sorted() 函数?

sorted() 函数接受一个可迭代对象(如列表、元组或字符串)作为输入,并返回一个新的已排序列表。原始的可迭代对象保持不变。该函数可以按升序或降序对元素进行排序,还可以基于自定义键函数进行排序。

sorted() 函数的语法

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

sorted(iterable, key=None, reverse=False)
  • iterable:要排序的元素序列。
  • key:一个可选函数,它接受可迭代对象中的一个元素,并返回一个用于排序的值。
  • reverse:一个布尔值,用于确定排序顺序。如果为 True,则元素将按降序排序。

sorted() 函数的优点

sorted() 函数具有以下几个优点:

  1. 灵活性:它可以对各种数据类型进行排序,包括数字、字符串和自定义对象。
  2. 效率sorted() 函数使用高效的排序算法,适用于对大型数据集进行排序。
  3. 不可变性:原始的可迭代对象保持不变,因为 sorted() 返回一个新的已排序列表。
  4. 可定制性keyreverse 参数允许你自定义排序行为。

sorted() 函数的使用场景

sorted() 函数可用于广泛的场景,例如:

  • 对数字或字符串列表按升序或降序进行排序。
  • 基于特定属性对自定义对象列表进行排序。
  • 基于一个或多个键对元组或字典列表进行排序。
  • 对字符串进行不区分大小写的排序。
  • 基于文件名或修改时间对文件或目录列表进行排序。

在以下部分中,我们将更详细地探讨 sorted() 函数的用法,涵盖基本排序和高级排序技术。

对基本数据类型进行排序

在本节中,我们将探讨如何使用 sorted() 函数对基本数据类型(如数字和字符串)进行排序。

对数字进行排序

在 Python 中,使用 sorted() 函数对数字进行排序很简单。以下是一个示例:

numbers = [5, 2, 8, 1, 9]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  ## 输出: [1, 2, 5, 8, 9]

默认情况下,sorted() 函数按升序对元素进行排序。要按降序排序,可以使用 reverse=True 参数:

numbers = [5, 2, 8, 1, 9]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers)  ## 输出: [9, 8, 5, 2, 1]

对字符串进行排序

对字符串进行排序也是 sorted() 函数的常见用例。以下是一个示例:

names = ["John", "Alice", "Bob", "Charlie"]
sorted_names = sorted(names)
print(sorted_names)  ## 输出: ['Alice', 'Bob', 'Charlie', 'John']

默认情况下,sorted() 函数按字母顺序对字符串进行排序。你还可以使用 key 参数和 str.lower() 函数进行不区分大小写的排序:

names = ["John", "alice", "Bob", "charlie"]
sorted_names = sorted(names, key=str.lower)
print(sorted_names)  ## 输出: ['alice', 'Bob', 'charlie', 'John']

对混合数据类型进行排序

sorted() 函数也可以处理混合数据类型,例如包含数字和字符串的列表。在这种情况下,元素按其自然顺序排序(数字在前,字符串在后):

mixed_data = [5, "apple", 2, "banana", 8, "cherry"]
sorted_data = sorted(mixed_data)
print(sorted_data)  ## 输出: [2, 5, 8, 'apple', 'banana', 'cherry']

通过使用 key 参数,你可以为混合数据类型自定义排序行为。例如,要按反向字母顺序对字符串进行排序:

mixed_data = [5, "apple", 2, "banana", 8, "cherry"]
sorted_data = sorted(mixed_data, key=lambda x: isinstance(x, str) and x.lower() or x)
print(sorted_data)  ## 输出: [8, 5, 2, 'cherry', 'banana', 'apple']

在下一节中,我们将探讨使用 sorted() 函数的更高级排序技术。

高级排序技术

在本节中,我们将探讨使用 sorted() 函数的更高级排序技术,包括对自定义对象进行排序、对字典进行排序以及使用自定义键函数。

对自定义对象进行排序

假设你有一个自定义对象列表,并且你想根据特定属性对它们进行排序。你可以使用 sorted() 函数的 key 参数来实现这一点。以下是一个示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person('{self.name}', {self.age})"

people = [
    Person("John", 35),
    Person("Alice", 28),
    Person("Bob", 42)
]

## 按年龄排序
sorted_people = sorted(people, key=lambda x: x.age)
print(sorted_people)  ## 输出: [Person('Alice', 28), Person('John', 35), Person('Bob', 42)]

## 按姓名排序
sorted_people = sorted(people, key=lambda x: x.name)
print(sorted_people)  ## 输出: [Person('Alice', 28), Person('Bob', 42), Person('John', 35)]

对字典进行排序

当你需要按特定顺序检索字典的键或值时,对字典进行排序会很有用。以下是一个示例:

person = {
    "name": "John",
    "age": 35,
    "city": "New York"
}

## 按键排序
sorted_person = sorted(person.items(), key=lambda x: x[0])
print(sorted_person)  ## 输出: [('age', 35), ('city', 'New York'), ('name', 'John')]

## 按值排序
sorted_person = sorted(person.items(), key=lambda x: x[1])
print(sorted_person)  ## 输出: [('name', 'John'), ('age', 35), ('city', 'New York')]

使用自定义键函数

sorted() 函数的 key 参数允许你定义一个自定义函数,该函数决定排序顺序。当你需要根据复杂逻辑或属性组合对元素进行排序时,这会很有用。

例如,假设你有一个表示学生记录的元组列表,你想先按成绩(降序)排序,然后按姓名(升序)排序:

student_records = [
    ("John", 85),
    ("Alice", 92),
    ("Bob", 78),
    ("Charlie", 90)
]

sorted_records = sorted(student_records, key=lambda x: (-x[1], x[0]))
print(sorted_records)  ## 输出: [('Alice', 92), ('Charlie', 90), ('John', 85), ('Bob', 78)]

在自定义键函数中,我们使用 -x[1] 按成绩降序排序,使用 x[0] 按姓名升序排序。

通过利用 sorted() 函数和自定义键函数的灵活性,你可以以各种方式对数据进行排序,以满足你的特定需求。

总结

Python 中的 sorted() 函数是一个多功能工具,可让你对各种数据类型进行排序。通过理解基础知识并探索高级排序技术,你可以优化 Python 代码并提高数据处理任务的效率。无论你是初学者还是经验丰富的 Python 程序员,本教程都将为你提供在 Python 项目中有效使用 sorted() 函数所需的知识和技能。