如何使用sorted()函数?

时间:2017-03-18 14:09:30

标签: python python-3.x sorting

我写的代码如下: enter image description here

当我尝试在python3.6下运行它时,出现错误: enter image description here

但我只是按照python文档显示的方式进行编码: enter image description here

有没有人能告诉我它有什么问题?

3 个答案:

答案 0 :(得分:3)

the sorted docs中所述,您需要将比较函数作为cmp参数传递而不是key参数。所以

sorted(some_list, cmp=cmp_ignore_case)

但是,使用cmp 的效率低于key,因此{2}已在Python 2中弃用了cmp一段时间从Python 3中删除。

key函数仅对您要排序的列表(或其他可迭代)中的每个唯一项目调用一次。相反,每次在两个项目之间进行比较时,都必须调用cmp函数

可以使用functools.cmp_to_keycmp函数转换为key函数,但这只是为了方便起见:它不能防止效率低下,它只隐藏它。因此,它只应用作使用cmp的旧代码的临时修复,或者在极少数情况下无法使用key函数。

有关详细信息,请参阅Sorting HOW TO

答案 1 :(得分:2)

在您展示的文档中它是正确的:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.upper)
['about', 'bob', 'Credit', 'Zoo']
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']

key函数应该只接受一个参数:sorted自动为每个字符串调用它。您的函数需要2个参数,而sorted并不知道s2应该是什么。

所以你的代码应该是:

def ignore_case(just_one_string):
    return just_one_string.upper()

print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=ignore_case))
# ['about', 'bob', 'Credit', 'Zoo']

混淆可能来自其他语言(例如Java)的快速,该方法需要2个参数(参见Comparator

答案 2 :(得分:2)

为了使用Python 3 sorted的自定义比较器函数,您必须使用functools.cmp_to_key,如下所示:

from functools import cmp_to_key
sorted(['bob', 'about', 'Zoo', 'Credit'], key=cmp_to_key(cmp_ignore_case))

有关详细信息,请参阅functools.cmp_to_keyhttps://docs.python.org/3/library/functools.html#functools.cmp_to_key

的文档