这个Lambda函数意味着什么?

时间:2017-03-20 17:09:25

标签: python sorting lambda

def largestNumber(self, num):
    num = [str(x) for x in num]
    num.sort(cmp=lambda x, y: cmp(y+x, x+y))
    return ''.join(num).lstrip('0') or '0'

我想知道的是num.sort行中究竟发生了什么,其中lambda函数接受x和y并执行此cmp()函数。如果有人想要查看此代码https://leetcode.com/problems/largest-number/#/description

,则这是代码正在使用的具体问题

2 个答案:

答案 0 :(得分:0)

是的,lambda函数完全按照你的建议进行比较:“998”到“989”等。这样,列表项被排序为字典顺序,最大的是第一个。您必须担心连接组合以获得最大数字的正确顺序:'9'与'98'是您需要连接的典型示例,因为您希望结果中包含“998”。

答案 1 :(得分:0)

我建议您使用Visualize python并使用以下代码:

class Solution:
    def largestNumber(self, num):
        num = [str(x) for x in num]
        num.sort(cmp=lambda x, y: cmp(y+x, x+y))
        return ''.join(num).lstrip('0') or '0'

print Solution().largestNumber([4,6,2,7,8,2,4,10])

要明确这个概念,

num = [str(x) for x in num]

这将列表num的每个元素都作为x并将其转换为字符串,结果列表存储为num

num.sort(cmp=lambda x, y: cmp(y+x, x+y))

cmp

  

cmp(x,y)¶       比较两个对象x和y并根据结果返回一个整数。如果x <1,则返回值为负。 y,如果x == y和0则为零   如果x>严格肯定为正收率

Lambda Expression

  

可以使用lambda关键字创建小的匿名函数。这个   function返回其两个参数的总和:lambda a,b:a + b。

希望这有帮助!