標籤:from -- imp ref size targe tab 比較 rev
Python3:sorted()函數及列表中的sort()函數
- 轉載請註明作者和出處:http://blog.csdn.net/u011475210
- 作業系統:WINDOWS 10
- 軟體版本:python-3.6.2-amd64
- 編??者:WordZzzz
一、sort,sorted函數介紹:
??Sort函數是list列表中的函數,而sorted可以對list或者iterator進行排序。
??下面我們使用help來查看他們的用法及功能:
sort:
>>> help(list.sort)Help on method_descriptor:sort(...) L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
sorted:
Python3.x:
>>> help(sorted)Help on built-in function sorted in module builtins:sorted(iterable, /, *, key=None, reverse=False) Return a new list containing all items from the iterable in ascending order. A custom key function can be supplied to customize the sort order, and the reverse flag can be set to request the result in descending order.
Python2.x:
>>> help(sorted)Help on built-in function sorted in module __builtin__:sorted(...) sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
??好吧,Python3.x和Python2.x的sorted函數有點不太一樣,少了cmp參數。下面本渣渣主要基於Python2.x的sorted函數進行講解,Python3.x直接忽略cmp這個參數即可,為了保證代碼通用性,不建議大家在今後的編程中使用cmp參數。
二、sort和sorted的比較:
??用sort函數對列表排序時會影響列表本身,而sorted不會。
舉例:
>>> a = [1,2,1,4,3,5]>>> a.sort()>>> a[1, 1, 2, 3, 4, 5]>>> a = [1,2,1,4,3,5]>>> sorted(a)[1, 1, 2, 3, 4, 5]>>> a[1, 2, 1, 4, 3, 5]
??Python2.x的sorted函數:sorted(iterable,cmp,key,reverse)
參數:
- iterable可以是list或者iterator;
- cmp是帶兩個參數的比較函數;
- key 是帶一個參數的函數;
- reverse為False或者True;
舉例說明:
(1)用cmp函數排序:
>>> list1 = [(‘david‘, 90), (‘mary‘,90), (‘sara‘,80),(‘lily‘,95)]>>> sorted(list1,cmp = lambda x,y: cmp(x[0],y[0]))[(‘david‘, 90), (‘lily‘, 95), (‘mary‘, 90), (‘sara‘, 80)]>>> sorted(list1,cmp = lambda x,y: cmp(x[1],y[1]))[(‘sara‘, 80), (‘david‘, 90), (‘mary‘, 90), (‘lily‘, 95)]
(2)用key函數排序:
>>> list1 = [(‘david‘, 90), (‘mary‘,90), (‘sara‘,80),(‘lily‘,95)]>>> sorted(list1,key = lambda list1: list1[0])[(‘david‘, 90), (‘lily‘, 95), (‘mary‘, 90), (‘sara‘, 80)]>>> sorted(list1,key = lambda list1: list1[1])[(‘sara‘, 80), (‘david‘, 90), (‘mary‘, 90), (‘lily‘, 95)]
(3)用reverse排序:
>>> sorted(list1,reverse = True)[(‘sara‘, 80), (‘mary‘, 90), (‘lily‘, 95), (‘david‘, 90)]
(4)用operator.itemgetter函數排序:
>>> from operator import itemgetter>>> sorted(list1, key=itemgetter(1))[(‘sara‘, 80), (‘david‘, 90), (‘mary‘, 90), (‘lily‘, 95)]>>> sorted(list1, key=itemgetter(0))[(‘david‘, 90), (‘lily‘, 95), (‘mary‘, 90), (‘sara‘, 80)]
??介紹operator.itemgetter函數:
>>> import operator>>> a = [1,2,3]>>> b = operator.itemgetter(0)>>> b(a)1
??operator.itemgetter函數擷取的不是值,而是定義了一個函數。
(5)多級排序:
>>> sorted(list1, key=itemgetter(0,1))[(‘david‘, 90), (‘lily‘, 95), (‘mary‘, 90), (‘sara‘, 80)]
(轉)Python3:sorted()函數及列表中的sort()函數