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

如何用lambda作为sorted的key替代cmp_to_key实现最大数排列?

问题描述

给定一个由非负整数组成的数组A,需要将其元素排列成最大的数字。例如:

A = [3, 30, 34, 5, 9]
输出:"9534330"

已通过自定义比较函数实现该功能,能否用lambda表达式达成同样效果?

原实现代码:

from functools import cmp_to_key

A = list(map(str,A))

def compare(num1,num2):
    if num1 + num2 > num2 + num1:
        return -1           
    else:
        return 1

A = sorted(A,key=cmp_to_key(compare))
return "".join(A)
解答

当然可以用lambda表达式替代自定义的compare函数,直接把比较逻辑嵌入到cmp_to_key的参数中,代码会更简洁:

from functools import cmp_to_key

def largestNumber(A):
    A = list(map(str, A))
    # 用lambda替代原compare函数
    A.sort(key=cmp_to_key(lambda x, y: -1 if x + y > y + x else 1))
    # 处理全0的特殊情况,避免输出"00"这类不符合预期的结果
    return "".join(A) if A[0] != "0" else "0"

说明

  • lambda表达式直接实现了原compare函数的逻辑:比较两个字符串拼接后的结果,若x+y更大则返回-1(让x排在y前面),否则返回1(让y排在x前面)
  • 补充了全0的特殊处理,比如输入[0,0]时,输出会是"0"而非"00"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:45:55