Python3.x中自定义比较函数

yipeiwu_com6年前Python基础

在Python3.x的世界里,cmp函数没有了。那么sorted,min,max等需要比较函数作为参数的函数该如何用呢?

以min函数的定义为例,有两种重载形式:

单参数(一个迭代器):

复制代码 代码如下:

min(iterable[, key=func]) -> value 

多参数(多个待比较内容):

复制代码 代码如下:

min(a, b, c, ...[, key=func]) -> value 

本文主要讨论key=func参数的使用 。举例说明吧:

1.自定义对象的比较
我定义了一个类test,有两个成员变量a和b:

复制代码 代码如下:

class test: 
         def __init__(self,a,b): 
              self.a = a 
              self.b = b 

然后实例化了三个对象x,y,z:
复制代码 代码如下:

x=test(10,'x') 
y=test(2,'y') 
z=test(8,'z') 

我想让它们以变量a为标准做比较,求得a最小的对象:
复制代码 代码如下:

minTest=min(x,y,z,key=lambda t:t.a) 

由于key这个参数需要传入一个函数,用lambda匿名函数很方便。本例中要实现比较函数(准确地说是比较关键字函数),故lamda的参数只要一个,随便你取什么名字(我用的是t),代表待比较的对象(即a,b,c);冒号后面是表达式,这里直接返回t的成员变量a。

于是乎,min函数(换成max,sorted等函数也是类似的)就会根据每个待比较对象的a值进行分别比较,返回a值最小的对象(的引用)赋值给minTest。

输出一下minTest.a,minTest.b就可以验证结果啦。

2.字典值value的比较
有一个字典:

复制代码 代码如下:

dic={'b':3,'a':5,'c':9,'d':2} 

如果要根据字典的键key排序,只要:
复制代码 代码如下:

sorted(dic)

返回一个list,是排序后的键,但是值没有放入list:
复制代码 代码如下:

['a', 'b', 'c', 'd'] 

用以下方法就好了:
复制代码 代码如下:

>>> sorted(dic.items()) 
[('a', 5), ('b', 3), ('c', 9), ('d', 2)]

如果要根据值value排序呢?那么就传入比较函数这一参数就好啦:

复制代码 代码如下:

sorted(dic.items(),key=lambda d:d[1])

我继续用lambda匿名函数。其中d表示dic.items()里的每个迭代元素,即一个元组(例如('a', 5));表达式d[1]就是元组中的第二个元素(例如5),它也是字典的值value,我们需要以它为比较标准。运行结果:
复制代码 代码如下:

[('d', 2), ('b', 3), ('a', 5), ('c', 9)]

P.S.
博主今天闯关The Python Challenge遇到一关,需要统计文本中出现的字符个数并找出出现最少的字符。当然那一关其实不需要自己写比较函数,输出统计结果肉眼看得出。博主借助搜索引擎min函数的key=func参数时,深痛中文Python介绍文章都是旧世界Python2.x的天下,满是在新世界不能用的语法,给Python3.x的初学者带来很多误导,有害无益。故出此文。

博主也是Python初学者,如有大牛批评指正,深感荣幸。

相关文章

Python魔法方法功能与用法简介

本文实例讲述了Python魔法方法功能与用法。分享给大家供大家参考,具体如下: 1、什么是魔法方法? 魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某...

Ubuntu16.04安装python3.6.5步骤详解

下载python3.6.5安装包 1.   上传安装包。打开终端,利用命令cd 进入文件所在文件夹里 python@ubuntu:~/workspace$pwd...

python中logging模块的一些简单用法的使用

python中logging模块的一些简单用法的使用

用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就...

详细介绍Python语言中的按位运算符

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下: 按位与   ( bitwise and of x and y )   &&nb...

python的构建工具setup.py的方法使用示例

python的构建工具setup.py的方法使用示例

本文介绍了python的构建工具setup.py,分享个大家,具体如下: 一、构建工具setup.py的应用场景 在安装python的相关模块和库时,我们一般使用“pip install...