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

排序函数:Python中使用内置的`sorted`函数来对列表、元组等序列类型进行排序。

发布时间:2023-06-20 03:00:46

Python中的sorted函数是非常强大的,它可以对几乎所有类型的序列进行排序。这个函数的使用非常简单,只需要传递一个待排序的序列作为参数,并且没有任何副作用,因为它并不改变原始序列,而是返回一个新的有序序列。

这个函数的基本用法如下:

sorted(iterable[, key][, reverse])

其中,参数iterable代表要排序的序列,必填;参数key是可选的,用于指定排序的关键字;参数reverse也是可选的,用于指定排序的顺序。

例如,对一个列表进行升序排序:

>>> a = [3, 1, 4, 1, 5, 9, 2, 6]
>>> sorted(a)
[1, 1, 2, 3, 4, 5, 6, 9]

如果要对这个列表进行降序排序:

>>> sorted(a, reverse=True)
[9, 6, 5, 4, 3, 2, 1, 1]

如果要按照元素长度进行排序:

>>> sorted(a, key=len)
[3, 1, 4, 1, 2, 6, 5, 9]

在上面的例子中,key参数指定了一个函数len来计算元素长度,这样排序就按照元素长度进行了。

除了上面的基本用法,sorted函数还有一些高级用法。下面来看一下这些用法。

1. 针对元组、字典等复杂数据类型

上面的例子都是针对列表的。但是,sorted函数也可以针对元组、字典等复杂数据类型进行排序。例如,对一个元组列表进行按第二个元素排序:

>>> b = [(1, 2), (3, 4), (5, 0), (1, 1)]
>>> sorted(b, key=lambda x: x[1])
[(5, 0), (1, 1), (1, 2), (3, 4)]

在这个例子中,key参数指定了一个匿名函数lambda,这个函数输入一个元组x,返回第二个元素,也就是对元组按照第二个元素排序。

2. 排序稳定性

Python的排序函数默认是稳定的,也就是说,如果两个元素的值相等,排序前后它们的相对位置不会发生改变。例如,对一个列表进行升序排序时,排序前后原本相邻的相同元素依然相邻:

>>> a = [3, 1, 4, 1, 5, 9, 2, 6]
>>> sorted(a)
[1, 1, 2, 3, 4, 5, 6, 9]
>>> a
[3, 1, 4, 1, 5, 9, 2, 6]

这个特性对有些应用非常重要,比如在数据库查询中,我们常常希望结果按照查询条件的先后顺序进行排序。

3. 利用sorted函数实现自定义排序

有时,我们需要对一个非常复杂的数据类型进行排序,这时就需要自定义排序函数。在Python中,我们可以先定义一个函数,然后将它传递给sorted函数的key参数来进行排序。

例如,对一个嵌套的字典列表进行排序(在字典中有一个键为age表示年龄):

>>> data = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 18}, {'name': 'Charlie', 'age': 20}]
>>>
>>> def age_key(item):
...     return item['age']
...
>>> sorted(data, key=age_key)
[{'name': 'Bob', 'age': 18}, {'name': 'Charlie', 'age': 20}, {'name': 'Alice', 'age': 25}]

在这里,我们定义了一个函数age_key,这个函数的输入是一个字典,输出是字典中age键对应的值(也就是年龄),然后将这个函数传递给key参数来进行排序。

总之,sorted函数是Python中非常实用的一个函数,它可以对几乎所有类型的序列进行排序,而且使用简单灵活。虽然它是一个内置函数,但是在大部分场合下它仍然是 的选择。