我知道sorted()中还有三个附加参数:cmp,key,reverse
我很清楚如何使用键和反向。密钥可以快速排序其内容项具有多个子项的列表,并反向简单地反转结果。例如:
>>> L1 = [('mama','1'),('papa','2'),('son','0')]
>>> L1 = sorted(L1, key = lambda x: x[1], reverse = True)
>>> L1
[('papa', '2'), ('mama', '1'), ('son', '0')]
但到目前为止,我还没有弄清楚如何正确使用cmp,尽管请阅读官方文档。任何人都可以为sorted()中的cmp参数提供一个很好的用例吗?
答案 0 :(得分:2)
cmp
参数接受一个函数作为参数,它接受两个参数。无论第一项是否大于,小于或等于第二项,该函数都应返回。
但使用它将是非常低效的,因为必须为每次比较调用它。
本HOWTO中给出的许多结构都假定为Python 2.4或更高版本。在此之前,没有
sorted()
内置,list.sort()
没有关键字参数。相反,所有Py2.x版本都支持cmp
参数来处理用户指定的比较函数。在Py3.0中,
cmp
参数被完全删除(作为简化和统一语言的更大努力的一部分,消除了丰富的比较和__cmp__
方法之间的冲突)。 p>在Py2.x中,sort允许一个可选函数,可以调用它来进行比较。该函数应该采用两个参数进行比较,然后返回负值为小于,如果它们相等则返回零,或者返回大于大于的正值。例如,我们可以这样做:
>>> def numeric_compare(x, y): return x - y >>> sorted([5, 2, 4, 1, 3], cmp=numeric_compare) [1, 2, 3, 4, 5]
注意:在Python 2.7中,我们有一个名为functools.cmp_to_key
的函数,可用于将cmp
函数转换为key
函数。
答案 1 :(得分:1)
根据Python Docs:
cmp
指定两个参数(可迭代元素)的自定义比较函数,它应返回负数,零或正数,具体取决于第一个参数是否被认为小于,等于或大于第二个参数
当您对一组元素进行排序时,将它们相互比较(这取决于排序算法),以尝试确定它们将按什么顺序排序。这是cmp
采取行动的地方。
答案 2 :(得分:1)
cmp
是用于提供自定义排序顺序的原始参数,并且是在Python 2.4中引入key
之前的 only 参数。 key
一直被推荐cmp
更高效(甚至在Python 2.4之前,鼓励Decorate-Sort-Undecorate成语;引入key
参数以简化其实现),并且在Python 3中完全删除了对cmp
的支持。
因此,cmp
没有单独的用例;在离开之前,它与key
共存了一段时间。