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

Python中的sorted()函数和自定义比较函数

发布时间:2023-05-29 00:42:38

Python中的sorted()函数是一种内置函数,用于排序映射类型和序列类型的元素。使用它可以轻松地对列表、元组、字典等元素进行排序。使用sorted()函数排序时,该函数会返回排序后的新列表,而不会修改原列表。该函数的语法格式如下:

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

其中,iterable表示要排序的序列或可迭代对象,key表示指定的比较函数,reverse表示是否对结果进行降序排序。

当sorted()函数需要对序列进行排序时,它会默认使用每个元素的自然排序顺序进行比较。例如,对于数字,它们会按照从小到大排序,对于字符串,它们会按照字典序排序。而当我们需要按照自己的排序函数来排序时,可以使用key参数来指定要使用的比较函数。

下面是一个使用key参数来排序的例子。假设我们有一个字符串列表,我们想按照字符串的长度进行排序,可以这样写:

>>> lst = ["apple", "banana", "orange", "lemon"]
>>> sorted(lst, key=len)
['lemon', 'apple', 'orange', 'banana']

这个例子中,key=len指定了使用长度作为排序标准,sorted()函数会根据每个元素的len()函数返回的结果对元素进行排序。

除了使用内置函数来作为比较函数,也可以自定义比较函数来进行排序。自定义比较函数是一个函数,接受一个参数,返回一个可用于排序的键。

下面是一个使用自定义比较函数来排序的例子。假设我们有一个字典列表,这个列表中每个字典都有一个name和age的属性。我们想根据age属性来排序,可以这样写:

>>> lst = [{"name": "Tom", "age": 28}, {"name": "Jerry", "age": 25}, {"name": "Bob", "age": 32}]
>>> def sort_by_age(d):
>>>     return d['age']
>>> sorted(lst, key=sort_by_age)
[{'name': 'Jerry', 'age': 25}, {'name': 'Tom', 'age': 28}, {'name': 'Bob', 'age': 32}]

这个例子中,我们定义了一个sort_by_age函数,它接受一个字典作为参数,并返回该字典的age属性。然后,我们将sort_by_age函数作为key参数传递给sorted()函数,以便根据每个字典的age属性进行排序。

在自定义比较函数时,需要确保函数返回的键是可比较的,否则排序将无法成功。如果返回的键是不可比较的数据类型,例如字典或列表,那么可以使用lambda表达式来返回可比较的值。例如,对于一个列表,我们可以使用lambda表达式返回列表的 个元素来进行排序:

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

这个例子中,我们使用一个lambda表达式来返回每个列表的 个元素作为排序依据,sorted()函数会根据这个依据对列表进行排序。

总之,sorted()函数在Python中用于对序列类型、映射类型等元素进行排序,使用它可以轻松地排序任意类型的数据。如果需要按照自定义比较函数进行排序,可以使用key参数来指定待排序对象的比较函数。自定义比较函数需要确保返回的键是可比较的,否则无法对对象进行排序。可以使用lambda表达式来使得键变为可比较的。