python sorted 自定义比较函数 单个或多个参数 数字拼接 cmp_to_key

本文通过实例展示了Python中排序函数sorted的使用方法,包括对列表和字典项的排序,以及如何自定义排序规则。同时,提出了一道关于数字数组拼接并寻找最小组合的编程挑战,提供了一个解决方案,利用字符串转换和自定义优先级函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不废话了,直接上例子:

res1 = sorted([2,3,1], reverse=True)
print(res1)
#[3, 2, 1]

res2 = sorted({1:3,2:1}.items(), reverse=True)
print(res2)
#[(2, 4), (1, 3)]

res3 = sorted({1:3,2:1}.items(), key=lambda x : x[1], reverse=True)
print(res3)
#[(1, 3), (2, 1)]

k,v=(1,3)
print(k,v)
#1,3

res4 = sorted([])
print(res4)
#[]

数字拼接题目

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。​

输入: [10,2]​
输出: "102"​


输入: [3,30,34,5,9]​
输出: "3033459"​​​

输入: [1,10,11,12]​
输出: "1011112"​​​

方案一: 把数字映射成单一优先级

def compare_num(input_lst):
    def get_priority(item, maxl):
        item_str = str(item)
        item_len = len(item_str)
        if item_len == maxl:
            return item, item_str
        else:
            return item, item_str+(maxl-item_len)*item_str[0]
    maxl = max(map(lambda x:len(str(x)), input_lst))
    pairs = list(map(lambda x:get_priority(x, maxl), input_lst))
    sorted_pairs = sorted(pairs, key = lambda x : x[1])
    outs = "".join([str(i) for i, j in sorted_pairs])
    return outs

if __name__ == '__main__':
    print(compare_num([3,30,34,5,9]))

方案二: 直接sort传入lambda表达式两个参数

import functools

def minNumber(nums):
    str_nums = list(map(str, nums))    
    def compare(a, b):
        if a + b < b + a:
            return -1
        else:
            return 1
    # 需要背下来functools.cmp_to_key
    str_nums.sort(key=functools.cmp_to_key(compare))
    result = ''.join(str_nums)
    
    if all(c == '0' for c in result):
        return '0'
    else:
        return result
print(minNumber([3,30,34,5,9]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值