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

Python 中如何使用 sorted 函数实现自定义排序?

发布时间:2023-06-17 10:01:48

Python 中的 sorted 函数是一种内置的排序函数,可以对包含任何可比较元素(如数字、字符串、元组等)的可迭代对象进行排序。默认情况下,sorted 函数可以按照元素的大小或字典序进行排序。然而,在有些情况下,我们需要按照自己的规则对元素进行排序,这时就需要使用 sorted 函数的自定义排序功能。

Python 中使用 sorted 函数自定义排序的方法有多种,下面将分别介绍常用的两种方法。

方法一:key 参数自定义排序

sorted 函数的 key 参数是一个函数或 lambda 表达式,用于定义排序规则。该函数接受一个元素作为参数,返回一个用于排序的关键字。在排序时,sorted 函数将对元素按照关键字进行排序,而不是按照元素本身的大小或字典序进行排序。

例如,假设我们要对一个字符串列表按照字符串长度进行排序,可以定义一个函数或 lambda 表达式来返回字符串长度:

lst = ['apple', 'banana', 'pear', 'orange']
sorted_lst = sorted(lst, key=lambda x: len(x))
print(sorted_lst)  # ['pear', 'apple', 'banana', 'orange']

在上述示例中,lambda 表达式 lambda x: len(x) 接受一个字符串 x,并返回该字符串的长度。sorted 函数在排序时将按照字符串长度进行排序,从而得到一个按照长度升序排列的字符串列表。

方法二:cmp 参数自定义排序

在 Python 2.x 版本中,sorted 函数的 cmp 参数可以用于自定义排序规则。cmp 参数接受一个函数,用于比较两个元素的大小。该函数接受两个参数,返回一个负数、零或正数,表示第一个元素小于、等于或大于第二个元素。在排序时,sorted 函数将使用该函数进行比较,从而得到一个排好序的结果。

例如,假设我们要对一个整数列表按照绝对值进行排序,可以定义一个函数来比较两个元素的大小:

lst = [3, -5, 1, -2, 4]
def my_cmp(x, y):
    if abs(x) < abs(y):
        return -1
    elif abs(x) > abs(y):
        return 1
    else:
        return 0
sorted_lst = sorted(lst, cmp=my_cmp)
print(sorted_lst)  # [1, -2, 3, -5, 4]

在上述示例中,函数 my_cmp 接受两个整数 x 和 y,并比较它们的绝对值大小。如果 x 的绝对值小于 y 的绝对值,则返回负数;如果 x 的绝对值大于 y 的绝对值,则返回正数;如果 x 和 y 的绝对值相等,则返回零。sorted 函数在排序时将调用该函数进行比较,从而得到一个按照绝对值大小升序排列的整数列表。

需要注意的是,在 Python 3.x 版本中,sorted 函数不再支持 cmp 参数,而是进行强制使用 key 参数自定义排序。因此,以上两种方法中应当以 key 参数来进行自定义排序。