help on built-in function sorted in module __builtin__:
sorted(...)
sorted(iterable, cmp=none, key=none, reverse=false) --> new sorted list
help on built-in function sort:
sort(...)
l.sort(cmp=none, key=none, reverse=false) -- stable sort *in place*;
cmp(x, y) -> -1, 0, 1
1. sorted函式是內建函式,而sort是序列的內部函式,所以它們呼叫方式不一樣,另外sorted函式多了乙個系列迭代器引數
2. sorted函式不改變引數系列,但是返回排好序的序列副本;而sort作為序列的內部函式,呼叫完後會對呼叫的序列進行排序
下面的結果很好的說明了這些:
>>> list=[2,1]
>>> x=sorted(list)
>>> x
[1, 2]
>>> list
[2, 1]
>>> y=list.sort()
>>> y
>>> list
[1, 2]
sorted與sort除了乙個是序列作為引數,乙個是序列呼叫該函式,其他引數幾乎完全一致,下面逐一來介紹其用法及效果:
由於sort函式的引數reverse,key,cmp都提供了預設引數,所以我們可以直接不指定這些引數值呼叫該函式。但是它必須有乙個前提,就是list中存放的型別是可比較的。否則就會彈出錯誤「type error: unorderable type"。
當取值為true時候就是倒序排,預設為false正序從小到大排
>>> list.sort(reverse=false)
>>> list
[1, 2]
>>> list.sort(reverse=true)
>>> list
[2, 1]
key表示用來做比較的值,這個主要對自定義的資料型別有用。下面用乙個例子來詮釋:
# definition for an interval.
class interval:
def __init__(self, s=0, e=0):
self.start = s
self.end = e
# initialize the interval list
list =
for i in range(10,7,-1):
for j in range(11,i,-1):
這裡我們定義了interval為[s,e]的資料結構並且初始化了。對於這個問題,顯然我們用預設的引數來呼叫會出錯,因為我們沒有提供可比較的函式來比較型別interval。對於這樣的情況,我們就可以指定比較的key來解決。
#sort the interval list這裡我們基於interval.start作為key進行排序了。list2 = sorted(list,key=lambda x:x.start)
#output the interval list
for x in list:
print("[%d,%d]"%(x.start,x.end))
for x in list2:
print("[%d,%d]"%(x.start,x.end))
可是接著問題來了,如果我不僅比較interval.start,當interval.start相等時候,還想比較interval.end,該怎麼辦?
#sort the interval list based on interval.start and interval.end
list2 = sorted(list,key=lambda x:(x.start,x.end))
我們用元祖(interval.start,interval.end)作為key來比較,而元祖有預設的cmp函式。這就達到了目標。
我們可以通過自定義函式或則使用簡潔的lambda來作為引數傳給cmp
#sort the interval list based on interval.start and interval.end
def cmpinterval(a, b):
if a.start != b.start:
return cmp(a.start,b.start)
return cmp(a.end,b.end)
list1 = sorted(list,cmp = cmpinterval)
list2 = sorted(list,cmp = lambda x,y:cmp(x.start,y.start))
不過比較遺憾的是發現在python 3.x中傳入cmp函式會出現乙個錯誤:
typeerror: 'cmp' is an invalid keyword argument for this function
這時候我們就需要使用key來繞過這個問題。另外乙個建議就是我們盡量使用key而不是cmp來排序以提高執行速度。
Python中的sort 方法
python中的sort 和sorted 一 sort 列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。lst 3,6 2,4 lst.sort para cmp,key,reverse printlst 2,3,4,6 如果需要乙...
python中的sort方法
一 基本形式 列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這樣的方法。由於元組是不可改動的。x 4,6,2,1,7,9 x.sort print x 1,2,4,6,7,9 假設須要乙個排序好的副本,同一時候保持原有列表不變。怎麼實現呢 x 4,6,2,1,7...
python中sort的使用
描述 sort 函式用於對原列表進行排序,如果指定引數,則使用比較函式指定的比較函式。語法sort 方法語法 list.sort key none,reverse false 引數引數 key 主要是用來進行比較的元素,只有乙個引數,具體的函式的引數就是取自於可迭代物件中,指定可迭代物件中的乙個元素...