python3 sorted()函数 将 cmp函数转化为key
语法
sorted 语法:
sorted(iterable, key=None, reverse=False)
参数说明:
- iterable -- 可迭代对象。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
用法:
普通排序
>>> sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
反向排序
>>> example_list = [5, 0, 6, 1, 2, 7, 3, 4]
>>> sorted(example_list, reverse=True)
[7, 6, 5, 4, 3, 2, 1, 0]
二维list排序
>>> example_list = [5, 0, 6, 1, 2, 7, 3, 4]
>>> result_list = sorted(example_list, key=lambda x: x*-1)
>>> print(result_list)
[7, 6, 5, 4, 3, 2, 1, 0]
通过 key 的值来进行数组/字典的排序
>>>array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
>>>array = sorted(array,key=lambda x:x["age"])
>>>print(array)
[{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]
多列排序
先按照成绩降序排序,相同成绩的按照名字升序排序:
>>> d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]
>>> l = sorted(d1, key=lambda x:(-x['score'], x['name']))
>>> print(l)
[{'name': 'alice', 'score': 38}, {'name': 'christ', 'score': 28}, {'name': 'darl', 'score': 28}, {'name': 'bob', 'score': 18}]
自定义排序
一般的 sorted 排序函数 都有相应的 cmp函数,用来定制化排序的比较方法。然而 python 3中的 sorted( ) 除去的cmp 参数,推荐使用 key。
Python中有相应的函数 支持将 cmp函数转化为key的值。
1 import functools
2 def tcmp(a,b):
3 if a > b :
4 return -1
5 elif a < b :
6 return 1
7 else:
8 return 0
9
10 nums = [1,2,3,4]
11 sorted_nums = sorted(nums, key = functools.cmp_to_key(tcmp))
Note:
1、functools.cmp_to_key() 将 cmp函数 转化为 key。
2、cmp函数的返回值 必须为 [1,-1,0]
例如:179. 最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:"210"
示例 2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
示例 3:
输入:nums = [1]
输出:"1"
示例 4:
输入:nums = [10]
输出:"10"
解答:
1 class Solution(object):
2 def largestNumber(self, nums):
3 """
4 :type nums: List[int]
5 :rtype: str
6 """
7 import functools
8
9 def com(a, b):
10 s1 = a + b
11 s2 = b + a
12 if s1 > s2:
13 return 1
14 elif s1 == s2:
15 return 0
16 else:
17 return -1
18
19 n = len(nums)
20 if n == 1:
21 return str(nums[-1])
22
23 data = [str(i) for i in nums]
24
25 d = sorted(data, key=functools.cmp_to_key(com))
26 res = ""
27 for r in d[::-1]:
28 res += r
29 return str(int(res))
注意:最后一行 『str(int(res))』是用来解决[0, 0]这一类用例的
str(int(res))
标签:
python 方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!