Python 函式式程式設計 高階函式 sorted

2021-10-11 22:11:38 字數 1900 閱讀 1837

排序也是在程式中經常用到的演算法。無論使用氣泡排序還是快速排序,排序的核心是比較兩個元素的大小。如果是數字,我們可以直接比較,但如果是字串或者兩個dict呢?直接比較數學上的大小是沒有意義的,因此,比較的過程必須通過函式抽象出來。

print

(sorted([

36,5,

21,12,

9,-21

]))d:\annicoda\envs\untitled\python.exe "d:/day py/sixteen.py"[-

21,5,

9,12,

21,36]

process finished with exit code 0

此外,sorted()函式也是乙個高階函式,它還可以接收乙個key函式來實現自定義的排序,例如

print

(sorted([

36,5,

-12,9

,-21]

,key=

abs)

)d:\annicoda\envs\untitled\python.exe "d:/day py/sixteen.py"[5

,9,-

12,-21

,36]process finished with exit code 0

大a到大z,小 a到小z

print

(sorted([

'bob'

,'about'

,'zoo'

,'credit'])

)d:\annicoda\envs\untitled\python.exe "d:/day py/sixteen.py"

['credit'

,'zoo'

,'about'

,'bob'

]process finished with exit code 0

預設情況下,對字串排序,是按照ascii的大小比較的,由於』z』 < 『a』,結果,大寫字母z會排在小寫字母a的前面。

現在,我們提出排序應該忽略大小寫,按照字母序排序。要實現這個演算法,不必對現有**大加改動,只要我們能用乙個key函式把字串對映為忽略大小寫排序即可。忽略大小寫來比較兩個字串,實際上就是先把字串都變成大寫(或者都變成小寫),再比較。

print

(sorted([

'bob'

,'about'

,'zoo'

,'credit'

], key=

str.lower)

)d:\annicoda\envs\untitled\python.exe "d:/day py/sixteen.py"

['about'

,'bob'

,'credit'

,'zoo'

]process finished with exit code 0

要進行反向排序,不必改動key函式,可以傳入第三個引數reverse=true:

print

(sorted([

'bob'

,'about'

,'zoo'

,'credit'

], key=

str.lower, reverse=

true))

d:\annicoda\envs\untitled\python.exe "d:/day py/sixteen.py"

['zoo'

,'credit'

,'bob'

,'about'

]process finished with exit code 0

sorted()也是乙個高階函式。用sorted()排序的關鍵在於實現乙個對映函式。

Python 函式式程式設計 高階函式

functional programming,函式式程式設計。python對函式式程式設計提供部分支援。對於純函式程式設計,對任一函式,只要輸入是確定的,輸出就是確定的,可稱之為無 我們知道函式的計算結果可以賦值給變數,例如x abs 5 同理,變數也可以指向函式,例如f abs。如果乙個變數指向了...

Python函式式程式設計 高階函式

高階函式 1.實參是乙個函式名 2.函式的返回值是乙個函式 函式本身也可以賦值給變數,變數也可以指向函式 f abs print f 10 傳遞的引數包括函式名 deffun x,y,f return f x f y print fun 10 23,abs map 函式接收兩個引數,乙個是函式,乙個...

python函式式程式設計 高階函式 偏函式

三大特性 immutable data不可變資料 first class functions函式像變數一樣使用 尾遞迴優化 每次遞迴都重用stack 好處 parallelization並行 lazy evaluation惰性求值 determinism 確定性 函式式程式設計 map reduce...