欢迎访问宙启技术站
智能推送

使用 Python 中的 sorted() 自带排序函数。

发布时间:2023-06-14 22:45:54

Python 是一种广泛使用的高级编程语言,因其简单易学、可读性强、代码短小而又功能强大而受到广泛欢迎。它广泛应用于各种领域中,包括科学计算、数据分析、机器学习、Web 开发等。Python 中标准库提供了许多实用函数,其中之一就是 sorted() 函数,它可以对列表、元组、集合等可迭代对象中的元素进行排序。

Python 中 sorted() 函数的语法如下:

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

其中:

- iterable:表示要排序的可迭代对象,如列表、元组、集合等。

- key:可选参数,表示用于排序的函数,可以是 lambda 函数、自定义函数等。

- reverse:可选参数,用于指定是否要降序排列,默认为 False。若要降序排列,则要将其设置为 True。

sorted() 函数会返回一个新的列表,包含排序后的元素。

下面我们来看几个例子,了解一下 sorted() 函数的用法。

#### 例子 1:对列表进行排序

对列表进行排序是 sorted() 函数最常见的用法之一。我们可以使用 sorted() 函数对一个列表进行排序,例如:

lst = [3, 1, 4, 2, 5]
sorted_lst = sorted(lst)
print(sorted_lst)  # [1, 2, 3, 4, 5]

这里我们定义了一个列表 lst,其中包含了 5 个整数。我们使用 sorted() 函数对其排序,并将结果存储在 sorted_lst 变量中,然后输出 sorted_lst 的值。由于 sorted() 函数会返回一个新的列表,因此原列表 lst 并没有发生变化。

#### 例子 2:对元组进行排序

除了列表,sorted() 函数还可以对元组进行排序。我们可以将元组转换为列表,然后使用 sorted() 函数对其进行排序,例如:

tpl = (3, 1, 4, 2, 5)
sorted_tpl = tuple(sorted(list(tpl)))
print(sorted_tpl)  # (1, 2, 3, 4, 5)

这里我们定义了一个元组 tpl,其中包含了 5 个整数。我们首先将其转换为列表,然后使用 sorted() 函数对其进行排序,最后再将排序后的列表转换为元组,并将结果存储在 sorted_tpl 变量中。

#### 例子 3:对字典按值进行排序

除了基本数据类型,sorted() 函数还可以对字典进行排序。但是需要注意的是,字典是无序的,因此我们需要对其进行转换后才能排列。

如果我们要按照字典中的值进行排序,可以使用 items() 方法,它可以将字典转换为元组列表。然后我们可以使用 sorted() 函数对其进行排序,例如:

dct = {'apple': 5, 'banana': 3, 'orange': 4, 'pear': 2}
sorted_dct = dict(sorted(dct.items(), key=lambda x: x[1]))
print(sorted_dct)  # {'pear': 2, 'banana': 3, 'orange': 4, 'apple': 5}

这里我们定义了一个字典 dct,其中包含了 4 个键值对,分别表示水果和对应的数量。我们使用 items() 方法将其转换为元组列表,然后使用 sorted() 函数对其进行排序。

这里使用了一个 lambda 函数作为排序函数,它会根据元组的第二个元素(即数量)进行排序。最后,我们将排序后的元素转换为字典,并将结果存储在 sorted_dct 变量中。

#### 例子 4:对对象进行排序

除了基本数据类型和字典,sorted() 函数还可以对对象进行排序。我们可以定义一个自定义的类,在其中定义一个 __lt__() 方法,用于比较对象大小。

例如,我们定义了一个包含姓名和年龄的 Person 类:

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

    def __lt__(self, other):
        return self.age < other.age

这个类包含了一个 __lt__() 方法,用于比较两个对象的大小。如果我们希望按照年龄大小进行排序,则可以使用 sorted() 函数对其进行排序,例如:

lst = [Person('Tom', 23), Person('Alice', 18), Person('Bob', 25)]
sorted_lst = sorted(lst)
for person in sorted_lst:
    print(person.name, person.age)

这里我们定义了一个包含 3 个 Person 对象的列表 lst,分别表示 Tom、Alice 和 Bob。我们使用 sorted() 函数对其进行排序,并将结果存储在 sorted_lst 变量中。最后,我们遍历 sorted_lst,输出每个 Person 对象的姓名和年龄。

在这个例子中,我们定义了一个 __lt__() 方法,它会比较两个 Person 对象的年龄大小。如果我们希望按照姓名或者其他属性进行排序,只需要修改 __lt__() 方法即可。

总结

在 Python 中,使用 sorted() 函数可以对列表、元组、集合、字典等可迭代对象进行排序,其语法简单易懂。除了默认排序方式外,我们还可以使用自定义函数进行排序,例如 lambda 函数、自定义函数等。sorted() 函数返回的是一个新的已排序的列表(或字典等),原来的可迭代对象并没有发生变化。根据不同的需求,我们可以灵活地使用 sorted() 函数进行排序。