十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
python 3.4.3 的版本中已经没有cmp函数,被operator模块代替,在交互模式下使用时,需要导入模块。
成都创新互联公司从2013年成立,是专业互联网技术服务公司,拥有项目成都网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元红安做网站,已为上家服务,为红安各地企业和个人服务,联系电话:028-86922220
在没有导入模块情况下,会出现:
相关推荐:《Python视频教程》
看下面给的内置函数:
这几个函数就是用来替换之前的cmp的,之前使用cmp的同胞们,咱们以后就换上面这些函数咯。
先简单说下这几个函数的意思吧。
lt(a,b) 相当于 ab 从第一个数字或字母(ASCII)比大小
le(a,b) 相当于a=b
eq(a,b) 相当于a==b 字母完全一样,返回True
ne(a,b) 相当于a!=b
gt(a,b) 相当于ab
ge(a,b) 相当于 a=b
函数的返回值是布尔类型。
Python3自带了解决方案,在functools包中有一个把按cmp方式的写的函数转换成key方式函数的函数,用法如下
from functools import cmp_to_key
print(sorted(['bob','Bob','about','Zoo','Credit'], key=cmp_to_key(cmp_ignore_case)))
对你这个排序需求实际上用key方式完全可以达到求。
比如要先按每个单词的第2个字母排序再按第3个字母排序。
from operator import itemgetter
sorted(['bob','Bob','about','Zoo','Credit'], key=itemgetter(1,2))
['about', 'bob', 'Bob', 'Zoo', 'Credit']
3开始没这个函数了,官方文档是这么写的
The cmp() function should be treated as gone, and the __cmp__() special method is no longer supported. Use __lt__() for sorting, __eq__() with __hash__(), and other rich comparisons as needed. (If you really need the cmp() functionality, you could use the expression (a b) - (a b) as the equivalent for cmp(a, b).)
大意就是cmp()函数已经“离开”了,如果你真的需要cmp()函数,你可以用表达式(a b) - (a b)代替cmp(a,b)
numbers.sort这种用法是错误的,如果你想要排序,则用如下语句:
num_sort=sorted(numbers,key=None,reverse=False)
新的list
num_sort才是一个排序后的列表。然后,你自定义的cmp过程只能对比两个数字,而能对比列表中的各个元素,python3解释器不知道你要做什么,所以才会出错。