HOWTO · Python

Python 中的比较器

本教程讨论比较器以及如何实现比较器函数以在 Python 中对数组进行排序。

本页内容

比较器主要用于比较给定对象的两个值。本教程讨论了比较器以及如何使用比较器函数在 Python 中对数组进行排序。

在 Python 中使用 cmp 参数和 sorted() 函数对数组进行排序

此方法仅适用于 Python 2 版本,并在 Python 3 之后发布的较新版本的 Python 中被移除。

早些时候,sorted() 方法有一个 cmp 参数,它利用比较器对给定的数据结构进行排序。

以下代码使用 cmp 参数和 sorted() 函数在 Python 2 中对数组进行排序。

def compare(a, b):
    return a[0] - b[0]


data = [(8, None), (7, None), (5, None), (4, None)]
print(sorted(data, cmp=compare))

上面的代码提供了以下输出:

[(4, None), (5, None), (7, None), (8, None)]

在 Python 中使用 functools 库对数组进行排序

虽然我们可以在 Python 2 中使用 Python 提供的 cmp() 函数,但在 Python 3 中的较新版本中不存在该函数。comparators 的使用在较新版本的 Python 中受到限制。

比较器 函数用于在 sorted() 函数的帮助下对给定的数据结构进行排序。在 Python 3 中,我们使用 key 函数来执行自定义排序过程。

在这里,我们使用 functools 库中的 functools.cmp_to_key() 函数来将新过时的 cmp 函数转换为 key 函数。

下面的代码使用比较器函数对给定的数据结构进行排序。

from functools import cmp_to_key


def compare(a, b):
    return a[0] - b[0]


data = [(8, None), (7, None), (5, None), (4, None)]
print(sorted(data, key=cmp_to_key(compare)))

上面的代码提供了以下输出:

[(4, None), (5, None), (7, None), (8, None)]