排序也是在程式中經常用到的演算法。無論使用氣泡排序還是快速排序,排序的核心是比較兩個元素的大小。如果是數字,我們可以直接比較,但如果是字串或者兩個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...