最近在看<<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