python中func函数_Python_sort函数结合functools.cmp_to_key(func)分析

举例如下:

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

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_key(func)

将旧式比较函数(old-style comparison function)转换为关键函数(key function)。使用接受关键函数的工具(如,,,,,)。此函数主要用作从python 2转换的程序的转换工具,它支持使用比较函数。

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

key function

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

python中的许多工具接受关键函数来控制元素的排序或分组方式(a number of tools in python accept key functions to control how elements are ordered or grouped)。它们包括,,,,,,,和。

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

最后总结:

# sort是对列表进行排序

# key 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序,每次排序前调用

# cmp_to_key 将比较函数转换为关键字函数

# cmp 自定义比较函数

比较函数类似于制定了比较规则。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值