最近在看<<Python基础编程>>,里面第二章(列表和元组)里,有一段关于高级排序的讲解
原文:
如果希望元素能按照特定的方式进行排序(而不是sort函数默认的方式,即根据python的默认排序规则按升序排列元素),那么可以通过compare(x,y)形式自定义比较函数。
compare(x,y)函数会在x<y时返回负数,在x>y时返回正数,如果x=y则返回0(根据你的定义)。定义好该函数之后,就可以提供给sort方法作为参数了。内建函数cmp提供了比较函数的默认实现方式:
>>> cmp(42,32)
1
>>> cmp(99,100)
-1
>>> cmp(10,10)
0
>>> numbers = [5,2,9,7]
>>> numbers.sort(cmp)
>>> numbers
[2,5,7,9]
里面有讲到:定义好该函数后,就可以提供给sort方法作为参数了,但是如何定义?
还有,我看代码里用不用cmp作为sort的参数,numbers的输出都是一样的嘛,那,需要cmp参数干些什么呢在sort的方法里。
请大家帮忙回答一下,谢谢。
sort
参数的完整定义见:http://docs.python.org/2/library/functions.html#sorted
https://wiki.python.org/moin/HowTo/Sorting/
如果我想降序排序呢,这时就要自定义cmp方法(当然更方便的是numbers.sort(reverse=True))
如果数组成员不是数字,而是其它的类型例如dict,想根据某个属性来排序
实际上sort()方法在不传入参数func的时候 默认cmp为None。
调用的是
lambda x,y: cmp(x, y)
,而实际上就是调用cmp函数。即:如果要实现自定义比较函数则需要重新指定cmp为你构造的比较函数,如下:
另外,在python3.x中取消了cmp参数,也不支持直接往sort()里面传函数了。可以构造排序函数传递给key来实现。
Python List sort()方法应用:http://www.w3cschool.cc/python/att-list-sort.html