Python排序函式用法

2022-06-23 21:51:12 字數 2810 閱讀 1215

python排序函式完美體現了python語言的簡潔性,對於list物件,我們可以直接呼叫sort()函式(這裡稱為"方法"更合適)來進行排序,而對於其他可迭代物件(如set,dict),我們可以使用更靈活的sorted()函式。

一.list的sort()函式

python原始碼builtins.py檔案對sort()函式的定義如下

def sort(self, key=none, reverse=false):

"""l.sort(key=none, reverse=false) -> none -- stable sort *in place*

"""pass

可以看出:sort()函式沒有返回值,有兩個引數。key表示的是排依據的函式;reverse是指需不需要反轉列表,預設為false表示的是公升序,如果設為true表示的是降序。

sort()用法如下

l = [1, 2, 7, 4, 3]

l.sort()

print(l)

#[1, 2, 3, 4, 7]

我們加入一些引數來看看,如降序排序:

l = [1, 2, 7, 4, 3]

l.sort(reverse=true)

print

(l)#

[7, 4, 3, 2, 1]

再比如,我們想通過key來實現降序排序,這裡用到匿名函式lambda:

l = [1, 2, 7, 4, 3]

l.sort(key=lambda x : x*(-1))

print

(l)#

[7, 4, 3, 2, 1]

當然,key還有很多用法,我們可以將其設為內建函式或者自定義函式,比如用絕對值函式:

l = [-1, 2, -7, 4, 3]

l.sort(key=abs)

print

(l)#

[-1, 2, 3, 4, -7]

python3對key的還有另外一種支援,就是通過functools模組的cmp_to_key函式,將傳統的cmp函式轉為key。這和lambda函式用法類似,但是對於比較的邏輯比較複雜的情況,這樣的方式會更清晰更便於維護。

from functools import

cmp_to_key

l = [-1, 2, -7, 4, 3]

defcmp(a,b):

if abs(a) return -1

else

:

return 1l.sort(key=cmp_to_key(cmp))

print(l)

二.sorted()

比起sort()函式只能排序列表,sorted函式更通用一些。官方文件對其有詳細說明:

sorted(iterable, *, key=none, reverse=false)

return a new sorted list

from the items in iterable.

sorted()返回值為list型別。引數列表iterable表示可迭代物件;*表示位置引數就此終結,後面的引數都必須用關鍵字來指定;key與reverse引數用法與sort()完全一致。

sorted()用法如下:

l = [1, 2, 7, 4, 3]

l1 =sorted(l)

print

(l1)

#[1, 2, 3, 4, 7]

s = 

s1=sorted(s)

print

(s1)

#[1, 2, 3, 4, 7]

注意這個排序物件是set物件,而結果是乙個列表物件(set物件本就沒有順序一說)。如果我們要實現乙個複雜一點的排序呢?比如對字典排序,排序依據是鍵值,排序結果是由鍵值對組成的列表:

dict = 

l = sorted(dict.items(), key=lambda x : x[1])

print(l)

#[('e', 1), ('a', 2), ('b', 3), ('d', 4), ('c', 7)]

最後給乙個leetcode上的問題(根據字元出現頻率排序),學以致用:

給定乙個字串,請將字串裡的字元按照出現的頻率降序排列。

輸入:"

tree

"輸出:

"eert

"解釋:'e

'出現兩次,'

r'和'

t'都只出現一次。因此'

e'必須出現在'

r'和'

t'之前。此外,"

eetr

"也是乙個有效的答案。

通過使用sorted函式**就很清晰易讀了:

def

frequencysort(s):

d ={}

for i in

s: d[i] = d.get(i,0) + 1l = sorted(d.keys(), key=lambda x: d[x], reverse=true)

s = ''

for i in

l: s += i *d[i]

return s

注意這裡的d.keys()生成的是乙個由key組成的可迭代物件,而前面**的dict.items()生成的是乙個由鍵值對物件(這是乙個tuple物件)組成的可迭代物件。

Python內建函式用法

abs dict help min setattr all dir hex next slice any divmod id object sorted ascii enumerate input oct staticmethod bin eval int open str bool exec is...

python有關函式用法

我們談到 文字處理 時,我們通常是指處理的內容。python 將文字檔案的內容讀入可以操作的字串變數非常容易。檔案物件提供了三個 讀 方法 read readline 和 readlines 每種方法可以接受乙個變數以限制每次讀取的資料量,但它們通常不使用變數。read 每次讀取整個檔案,它通常用於...

python函式的用法

import sys print sys.argv 1 sys.argv 2 name pp def function global name 全域性變數 name aaa print name function print name name adsad asdasd def function p...