Python中高階函式sorted 用法

2022-05-07 12:45:09 字數 2080 閱讀 7562

在python中,有內建的排序方法:sorted(iterable, key, reverse)。

sorted()函式也是乙個高階函式,它還可以接收乙個key函式來實現自定義的排序。key指定的函式將作用於list的每乙個元素上,並根據key函式返回的結果進行排序。

print(sorted([1,34,-5,55,-100,12]))

直接像上面對數字進行的排序,得到的結果為下面:

[-100, -5, 1, 12, 34, 55]

這是對簡單的排序,但是如果按照絕對值進行排序,就可以利用key

print(sorted([1,34,-5,55,-100,12],key=abs))

加上key,按照絕對值進行排序,得到的結果如下所示:

[1, -5, 12, 34, 55, -100]

這是對key的簡單利用,當然我們還能夠自己定義函式來排序。

def

ad(x):

return x*(-1)

print(sorted([1,34,-5,55,-100,12],key=ad))

如上定義了乙個函式ad(),這個函式就是取反,按照取反之後的結果進行排序,得到下面的結果:

[55, 34, 12, 1, -5, -100]

這也是對key的簡單運用,通過自己定義函式的方法。

sorted()除了對純數字進行排序以外,還能夠對字串進行排序,按照ascii的順序進行排序

print(sorted(['as','xp','junjun','xx','zp','www','+']))

print(sorted(['as','xp','junjun','xx','zp','www','+'],key=str.lower))

print(sorted(['as','xp','junjun','xx','zp','www','+'],key=str.lower,reverse=true))

如上為對字串進行排序,如下為結果:

['+', 'xx', 'as', 'junjun', 'www', 'xp', 'zp']

['+', 'as', 'junjun', 'www', 'xp', 'xx', 'zp']

['zp', 'xx', 'xp', 'www', 'junjun', 'as', '+']

通過對比,可以發現,先特殊字元,再大寫字母,再小寫字母。如果加上key=str.lower來排序,所排序出來的字串不區分大小寫。若加上reverse=true,則是按照相反的順序來排序。

練習:假設我們用一組tuple表示學生名字和成績:

l = [('bob',75),('adam',92),('xp',100),('junjun',1)]

請用sorted()對上述列表分別按名字和成績排序:

#

按照名字排序

defby_name(t):

return

t[0].lower()

#按照成績排序

defby_score(t):

return t[1]

l = [('

bob',75),('

adam

',92),('

xp',100),('

junjun

',1)]

l2 = sorted(l, key =by_name)

print

(l2)

l3 = sorted(l, key =by_score)

print(l3)

上面練習的結果為:

[('adam', 92), ('bob', 75), ('junjun', 1), ('xp', 100)]

[('junjun', 1), ('bob', 75), ('adam', 92), ('xp', 100)]

【分析】 

l列表中的每個元素都是乙個元組,首先按名字排序,key作用與排序中列表裡的每乙個元素,所以傳入by_name裡的引數t是乙個元組,需要對元組的第乙個元素進行排序,所以是t[0]。所以說他[0]就是元組的第乙個欄位name,而相應的t[1]就是元組的第二個欄位score。 

python中高階函式

一等公民 高階函式 高階函式 high order function def counter base def inc step 1 nonlocal base base step return base return inc 上面的counter是高階函式,因為return inc,即返回函式 內...

Python的學習 Python中高階函式的應用

變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數,這種函式就稱之為高階函式。map 函式接收兩個引數,乙個是函式,乙個是序列 map將傳入的函式依次作用到序列的每個元素,並把結果作為新的序列返回 序列 1,2,3,4 的每個元素求絕對值 print list map ...

Python中高階容器

python 中常見的容器為 list set dict tuple 這裡主要探索下不常見的容器 author jiangnan he list set dict tuple import queue 佇列 import heapq 優先佇列 實現堆排序 大小堆 from collections i...