如何修复“类型错误:sort() 的关键字参数无效”

问题描述 投票:0回答:2

使用

compare_points
函数对二维点列表进行排序。

我不明白如何将

compare_points
函数传递给
sort()
方法。

def compare_points( p, q ):
    if p[0] < q[0] or (p[0] == q[0] and p[1] < q[1]):
        return -1
    elif p[0] > q[0] or (p[0] == q[0] and p[1] > q[1]):
        return 1
    else:
        return 0

#print(compare_points( [1,3], [5,6])) # outputs -1
#print(compare_points( [1,3], [1,6])) # ouputs -1
#print(compare_points( [1,3], [1,3])) # outputs 0
#print(compare_points( [1,3], [0,3])) # outputs 1


L = [ [5,8], [5,2], [12, 3], [1,3], [10,2], [12,1], [12,3] ]
L.sort(cmp=compare_points)
print(L)

实际结果:

L.sort(cmp=compare_points)
builtins.TypeError: 'cmp' is an invalid keyword argument for sort()

预期结果:

L = [ [1,3], [5,2], [5,8], [10,2], [12,1], [12,3], [12,3] ]
python python-3.x sorting
2个回答
6
投票

实际上根本不需要在这里指定键,因为您在这里定义的基本上只是字典顺序,这是Python中列表排序的标准方式。

因此,您可以在不指定键的情况下对进行排序,例如:

>>> L = [ [5,8], [5,2], [12, 3], [1,3], [10,2], [12,1], [12,3] ] >>> L.sort() >>> L [[1, 3], [5, 2], [5, 8], [10, 2], [12, 1], [12, 3], [12, 3]]

python-2.x.sort(…)

 [python-doc] 函数确实可以采用 cmp=...
 参数,该参数是两个值之间的比较器。从 
python-3.x 参数已被删除

使用键排序更有效,因为它可以避免实现无效的比较函数:比较函数应该是

自反反对称传递。一些比较函数不满足这些条件。


1
投票
您正在使用Python3 在 python3 中,关键字参数是关键,所以你应该这样做

L.sort(key=compare_points)

如果您想使用 cmp 关键字参数来执行此操作,则应该使用 Python2

© www.soinside.com 2019 - 2024. All rights reserved.