You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类继承str、sorted用类作key的相关技术疑问

关于Python最大数拼接代码的疑问解答

先贴出你提到的代码:

class LargerNumKey(str):
    def __lt__(x, y):
        return x+y > y+x
        
class Solution:
    def largestNumber(self, nums):
        largest_num = ''.join(sorted(map(str, nums), key=LargerNumKey))
        return '0' if largest_num[0] == '0' else largest_num

你的理解是对的:这段代码通过自定义排序规则,让字符串形式的数字按ab > ba的逻辑排序,最终拼接出最大的数。下面逐个解答你的疑问:

疑问解答

1. LargerNumKey类定义中传入str作为参数是什么含义?

这是Python的类继承语法,意思是LargerNumKey类直接继承了内置的str字符串类。这样做的好处是:

  • LargerNumKey的实例自动拥有str类的所有功能(比如字符串拼接、长度计算等),不用重复实现;
  • 当我们把字符串传入LargerNumKey时,会直接复用str的构造逻辑,把输入转换成字符串对象。

2. 为何要定义新类而非函数作为sorted的key参数?

sorted的key参数如果传函数,只能给单个元素生成一个“排序依据值”,然后基于这个值的默认规则(比如字符串字典序)排序。但我们需要的是自定义两个元素之间的比较逻辑——判断x+y是否大于y+x,这是函数做不到的。

当把LargerNumKey作为key时,每个元素会被转换成LargerNumKey的实例,而我们重写了它的__lt__(小于比较)方法。sorted内部会调用这个方法来判断元素的先后顺序,刚好满足我们的排序需求。

3. __lt__方法中的x是否代表常规写法里的self?

没错,x就是常规类方法里的self,只是换了个名字。Python对类方法的第一个参数名称没有强制要求,只是大家习惯用self指代实例本身。这里用x是因为在比较场景里,x和y都是要对比的对象,名字更直观。

内容的提问来源于stack exchange,提问作者Shisui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:27:23