
Python3中sorted函数的cmp参数变化详解
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本文详细解析了Python 3中sorted函数不再支持cmp参数的原因及其替代方案,帮助读者更好地理解和运用该函数。
今天在刷 LeetCode 的时候遇到了第 179 题关于返回最大数的问题,在 Python2 中可以很方便地使用 `sorted(cmp)` 函数来解决这个问题。然而到了 Python3,这个参数被取消了,经过查找发现应该借助于 `functools` 模块中的 `cmp_to_key` 函数。
```python
import functools
def cmp(a, b):
if a > b:
return -1
elif a < b:
return 1
else:
return 0
nums = [1,2,3,4,5,6]
sorted_nums = sorted(nums, key=functools.cmp_to_key(cmp))
```
在 Python 编程语言中,`sorted()` 函数用于对任何可迭代对象进行排序操作,并返回一个新的已排序列表。在 Python 2.x 版本中, `sorted()` 允许传递一个 `cmp` 参数来定义自定义的比较逻辑;而在 Python 3 中这一参数被移除。
Python 2.x 的 `cmp(x, y)` 函数接收两个参数并基于它们的相对大小返回 -1、0 或者 1。这种函数在需要复杂排序规则时非常有用,但在性能和语言设计简化方面存在不足之处。
为了兼容 Python 3 中的排序功能,可以使用 `functools.cmp_to_key` 将传统的比较函数转换为一个键值函数,并与 `sorted()` 的 key 参数一起使用。如上例所示,通过这种方式可以在不改变逻辑的情况下实现复杂度更高的自定义排序操作。
Python 3.x 移除 cmp 函数的原因包括:
1. **性能优化**:利用 key 参数可以直接进行属性比较而不需要额外的函数调用。
2. **一致性**:key 参数与 `min()` 和 `max()` 的使用保持一致,简化了语言设计。
3. **富比较方法**:Python 3.x 引入了一系列内置的方法(如`__lt__`, `__gt__`等),直接在类定义中实现这些方法可以更直观地进行对象间的比较。
总之,在 Python 3 中通过使用 key 参数实现了更加灵活和高效的自定义排序,而不需要依赖于旧版本中的 cmp 函数。
全部评论 (0)


