我遇到了一个代码片段,用于从字符串数组中找到最大数字。但是我无法理解比较是如何工作的,因为只有我们传递一个参数,即列表,但是在 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))
答案 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'