Python中的cmp()函数

2025年1月5日 | 阅读 5 分钟

Python 中的 cmp() 函数用于比较两个对象并返回值。它在 Python 2 中是一个内置函数。然而,在 Python 3 中,它已被 == 和 is 运算符取代,这些运算符使得比较对象更加健壮、准确和灵活,并根据比较值返回负值、正值和零。让我们进一步了解一下。

cmp() Function in Python

如果第一个整数小于第二个整数,则输出为 -1。类似地,如果第一个对象大于第二个对象,则结果为 1。如果两个对象相同,则输出为 0。让我们通过相关示例来理解此 cmp() 方法的概念。

语法

参数

假设 x 和 y 是进行比较的两个对象。对象可以是任何数据类型,例如数字或字符串。

返回值

比较两个数字后,它返回

  1. 如果 a>b,返回 1。
  2. 如果 a<b;返回 -1。
  3. 如果 a=b;返回 0。

比较两个整数的一些示例

在下一节中,我们将通过一些示例来演示在 Python 中比较两个整数的方法。

示例 1

输出

-1
0 
1

说明

在上面的代码中,代码使用 `cmp()` 方法比较两个对象的值。

在第一种情况中,如果 x 小于 y,则结果为 -1。在第二种情况中,如果 x 的比较等于 y,则打印 0。在第三种情况中,比较 x 是否大于 y:输出将为 1。

示例 2

输出

5 is less than 10
12 is equal to 12
20 is greater than 18

说明

我们在上述程序中创建了一个 comp_num() 函数来比较两个数字。第一个语句比较 5 和 10 并显示输出。第二个语句比较 12 和 12 并打印值。对于第三个和最后一个调用,它比较 20 和 18 并生成结果。

使用 cmp() 检查数字是偶数还是奇数

在下一节中,我们将讨论如何借助 cmp() 方法检查数字是偶数还是奇数。

示例 1

输出

Even
Odd

说明

在第一种情况下,n%2 等于 0,表示它是偶数。cmp() 函数将 0 与结果进行比较;如果被视为 false,则打印“Even”。在第二种情况下,n%2 等于 1。它是奇数。

对元组列表进行排序

我们将通过下面的示例来理解如何对元组列表进行排序。

示例

输出

[(5, 1), (3, 5), (2, 6), (4, 7)]

说明

上面的代码使用带有 lambda 定义的自定义比较函数的 sorted() 函数,根据每个元组的第二个元素对元组列表进行排序。但是,此代码适用于 Python 2.x,因为它使用了 Python 3.x 中已移除的 cmp 参数。输出根据其第二个元素按升序对元组进行排序。

比较两个字符串

现在我们将看到一个示例,演示使用 cmp() 方法比较两个字符串。

示例

输出

-1
1
0

说明

在上面的程序中,在第一种情况下,根据字母顺序,“Hello”在“Python”之前;因此,输出将为 -1。类似地,在第二种情况下,输出将为 1,而在第三种情况下,通过根据字母顺序比较字符串,您将获得 0 的输出。

比较列表

在下一节中,我们将通过一些示例来演示在 Python 中比较列表的方法。

示例

输出

-1
1
0

说明

上面的代码使用 cmp() 方法逐个元素地比较两个列表。第一个打印语句比较 list1 和 list2。它将打印 -1。类似地,第二个打印语句比较 list2 和 list1,并将打印 1。第三个打印语句比较 list1 和自身,并打印 0,因为它们相等。

自定义对象比较

假设我们有一个自定义类 person,它有两个属性:name 和 age。现在,我们将使用 cmp() 根据年龄对 Person 对象列表进行排序。

示例

输出

John (20 years old)
Doe (22 years old)
Mac (25 years old)

说明

上面的代码创建了一个具有 name 和 age 属性的 Person 类。然后,它使用 sorting_ppl 函数根据年龄对 Person 对象列表进行排序,并将打印他们的姓名和年龄。

排序算法中的 cmp() 函数

为了获得排序方法中对象的顺序,cmp() 函数经常被使用。让我们举个例子

示例

输出

["kiwi", "pear", "peach", "papaya"]

说明

在上面的程序中,水果根据其名称的长度按升序排序。如果两个水果的长度相同,它们的顺序保持不变。

结论

cmp() 函数在 Python 2 中曾经存在,它促进了值比较。然而,它在 Python 3 中已被弃用。取而代之的是,Python 3 鼓励使用比较运算符(==、!=、<、> 等)进行更灵活的比较。将 Python 2 代码迁移到 Python 3 需要用现代替代品替换 cmp()。