gpt4 book ai didi

python - 无法理解 __lt__ 方法

转载 作者:行者123 更新时间:2023-12-04 14:33:58 25 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

去年关闭。




Improve this question




嗨,我正在 leetcode 上解决这个问题 [给定一个非负整数列表,将它们排列成最大的数字。] 我看到了这个解决方案。
我无法理解 LargerNumKey 类是如何工作的?还有,目的是什么 lt .什么是变量 x 和 y

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

最佳答案

__lt__ “dunder”方法允许您使用 <对象的小于号。写成如下可能更有意义:

class LargerNumKey(str):
def __lt__(self, other):
return self+other > other+self

# This calls into LargerNumKey.__lt__(LargerNumKey('0'), LargerNumKey('1'))
LargerNumKey('0') < LargerNumKey('1')
幕后当 str被子类化,添加 self+other实际上生成一个 str对象而不是 LargerNumKey对象,因此您不会遇到无限递归问题,即根据类型自己的不等运算符来定义类型的不等式。
这样做的原因可能更有趣:
  • 我们需要的第一个事实是,对于任何正整数,我们实际上都有 (x>y) == (str(x)>str(y)) ,所以当自定义__lt__正在运行它实际上是在询问由这些字符串连接表示的整数是大于还是小于彼此。
  • 第二个有趣的事实是,这样定义的新不等式实际上是可传递的——如果 s<tt<u然后 s<u ,所以 sorted()方法能够通过获得每个可能对的正确答案来将所有数字按正确顺序排列。
  • 关于python - 无法理解 __lt__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63164064/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com