无法理解在python中排序

时间:2018-01-10 16:35:10

标签: python sorting

我遇到了一个代码片段,用于从字符串数组中找到最大数字。但是我无法理解比较是如何工作的,因为只有我们传递一个参数,即列表,但是在 lt 方法它期待2个参数。

class Largenum(str):
    def __lt__(x,y):
        return x+y > y+x

lgs=''.join(sorted(map(str,[3, 30, 34, 5, 9]),key=Largenum))

1 个答案:

答案 0 :(得分:1)

sorted函数显然不会直接调用此类的__lt__方法。它将在类的各个成员对上重复调用此方法,以便按排序顺序排列它们。您可以通过向方法添加简单print来轻松确定这一点。

>>> class Largenum(str):
...     def __lt__(x,y):
...         result = x+y > y+x
...         print('# __lt__({0!r}, {1!r}) => {2}'.format(x, y, result))
...         return result
...
>>> lgs=''.join(sorted(map(str,[3, 30, 34, 5, 9]),key=Largenum))
# __lt__('30', '3') => False
# __lt__('34', '30') => True
# __lt__('34', '30') => True
# __lt__('34', '3') => True
# __lt__('5', '3') => True
# __lt__('5', '34') => True
# __lt__('9', '3') => True
# __lt__('9', '34') => True
# __lt__('9', '5') => True
>>> lgs
'9534330'