前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python_sort函数结合funct

Python_sort函数结合funct

作者头像
py3study
发布2020-01-23 20:25:25
7030
发布2020-01-23 20:25:25
举报
文章被收录于专栏:python3python3

举例如下:

代码语言:javascript
复制
 1 from functools import cmp_to_key
 2 persons = [
 3     {
 4         'name':'zhangsan',
 5         'age':20,
 6         'grade':98
 7     },
 8     {
 9         'name':'lisi',
10         'age':18,
11         'grade': 88
12     },
13     {
14         'name':'wangwu',
15         'age':20,
16         'grade': 20
17     },
18     {
19         'name': 'yanqing',
20         'age': 15,
21         'grade': 20
22     },
23     {
24         'name': 'awu',
25         'age': 20,
26         'grade': 20
27     },
28 ]
29 
30 def cmp(a,b):
31     # 如果返回的是一个大于0的值,那么代表a>b
32     # 如果返回的是一个小于0的值,那么代表a<b
33     # 如果返回的是一个等于0的值,那么代表a=b
34     if a['grade'] > b['grade']:
35         return 1
36 
37     elif a['grade'] < b['grade']:
38         return -1
39     else:
40         if a['age'] > b['age']:
41             return 1
42         elif a['age'] < b['age']:
43             return -1
44         else:
45             if a['name'] > b['name']:
46                 return 1
47             else:
48                 return -1
49 persons.sort(key=cmp_to_key(cmp))
50 new_persons = sorted(persons,key=cmp_to_key(cmp))
51 print(persons)
52 print(new_persons)

针对sort(key=cmp_to_key(cmp))及函数cmp所产生的作用尝试分析。

如下:

Sort(*,key=None,reverse = False)

sort()接受两个只能通过关键字传递的参数(关键字参数):

key指定一个参数的函数,该函数用于从每个列表元素中提取一个比较键(例如,key=str.lower)。对列表中每个项对应的键计算一次,然后用于整个排序过程。None的默认值意味着列表项是直接排序的,不需要计算单独的键值。

可以使用functools.cmp_to_key()实用程序来转换2。将cmp函数样式设置为关键函数。

functools.cmp_to_keyfunc 

将旧式比较函数(old-style comparison function)转换为关键函数(key function)。使用接受关键函数的工具(如sorted()min(), max()heapq.nlargest()heapq.nsmallest(), itertools.groupby())。此函数主要用作从Python 2转换的程序的转换工具,它支持使用比较函数。

比较函数是任何可调用的,它接受两个参数,对它们进行比较,并返回一个负数表示小于,零表示相等,或者一个正数表示大于。键函数是一个可调用的函数,它接受一个参数并返回另一个值作为排序键使用。

key function

关键函数或排序函数是可调用的,它返回用于排序或排序的值。例如,使用local .strxfrm()生成一个排序键,该键知道特定于区域设置的排序约定。

Python中的许多工具接受关键函数来控制元素的排序或分组方式(A number of tools in Python accept key functions to control how elements are ordered or grouped)。它们包括min()max(), sorted()list.sort()heapq.merge(), heapq.nsmallest()heapq.nlargest(),和 itertools.groupby()

有几种方法可以创建关键函数。为例。low()方法可以作为区分大小写排序的关键函数。或者,可以从一个lambda表达式构建一个关键函数,例如r:(r[0], r[2])。此外,运算符模块还提供了三个关键的函数构造函数:attrgetter()、itemgetter()和methodcaller()。

最后总结:

代码语言:javascript
复制
# sort是对列表进行排序
# key 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序,每次排序前调用
# cmp_to_key 将比较函数转换为关键字函数
# cmp 自定义比较函数

比较函数类似于制定了比较规则。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档