Python中sort以及sorted函式初探

2021-06-26 13:10:10 字數 2644 閱讀 4575

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

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作為key進行排序了。

可是接著問題來了,如果我不僅比較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 主要是用來進行比較的元素,只有乙個引數,具體的函式的引數就是取自於可迭代物件中,指定可迭代物件中的乙個元素...