排序函数:Python中使用内置的`sorted`函数来对列表、元组等序列类型进行排序。
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中非常实用的一个函数,它可以对几乎所有类型的序列进行排序,而且使用简单灵活。虽然它是一个内置函数,但是在大部分场合下它仍然是 的选择。
