Python高階函式 三

2021-10-03 02:07:40 字數 3031 閱讀 2339

排序演算法在各種程式中都有廣泛的應用,排序的核心就是按照某種規則比較所謂的「大小」,然後交換位置,如果是數字,我們可以直接比較,但如果是字串或者兩個字典呢?直接比較數學上的大小是沒有意義的,因此,比較的過程必須通過函式抽象出來。

python的內建sorted函式就可以對list進行排序。

>>

>

sorted([

36,5,

15,-9

,12,24

])[-

9,5,

12,15,

24,36]

此外,sorted()也是乙個高階函式,能夠包含乙個關鍵字key使待排序的list能按照key的有關規則進行排序,下面就是乙個小例子。

>>

>

sorted([

36,-5

,4,25

,12,-

40],key =

abs)[4

,-5,

12,25,

36,-40

]

abs就是對list裡的所有數字的絕對值進行排序。

然後就是利用sorted函式對子符串進行排序,預設情況下,對字串排序,是按照ascii的大小比較的,由於』z』 < 『a』,結果,大寫字母z會排在小寫字母a的前面。

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

這樣,我們給sorted傳入key函式,即可實現忽略大小寫的排序:

>>

>

sorted([

'b',

'list'

,'abs'

,'key'

,'wto'])

['b'

,'list'

,'abs'

,'key'

,'wto'

]#預設的ascii碼排序

>>

>

sorted([

'b',

'list'

,'abs'

,'key'

,'wto'

],key =

str.lower)

['abs'

,'b'

,'key'

,'list'

,'wto'

]#忽略大小寫的排序,把大寫的字元在排序的階段進行改寫為小寫。

前面我們也曾經介紹過,如果想要把什麼東西逆置,就需要額外的乙個限定條件為reverse = true,排序也不例外,還是上個例子:

>>

>

sorted([

'b',

'list'

,'abs'

,'key'

,'wto'

],reverse =

true)[

'wto'

,'key'

,'abs'

,'list'

,'b'

]>>

>

sorted([

'b',

'list'

,'abs'

,'key'

,'wto'

],key =

str.lower,reverse =

true)[

'wto'

,'list'

,'key'

,'b'

,'abs'

]

結果顯而易見,從上述例子可以看出,高階函式的抽象能力是非常強大的,而且,核心**可以保持得非常簡潔。

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

l = [(『bob』, 75), (『adam』, 92), (『bart』, 66), (『lisa』, 88)]

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

>>

>

defby_name

(t):

return t[0]

.lower(

)>>

> l =[(

'bob',75

),('adam',92

),('bart',66

),('lisa',88

)]>>

> l2 =

sorted

(l,key = by_name)

>>

>

print

(l2)[(

'adam',92

),('bart',66

),('bob',75

),('lisa',88

)]

再按成績從高到低排序:

>>

>

defby_score

(t):

return t[1]

>>

> l =[(

'bob',75

),('adam',92

),('bart',66

),('lisa',88

)]>>

> l2 =

sorted

(l,key = by_score)

>>

>

print

(l2)[(

'bart',66

),('bob',75

),('lisa',88

),('adam',92

)]>>

> l2 =

sorted

(l,key = by_score,reverse =

true

)>>

>

print

(l2)[(

'adam',92

),('lisa',88

),('bob',75

),('bart',66

)]

python高階三 函式

在python中函式用關鍵字def宣告,引數用逗號隔開,另外需要注意的是函式沒有返回型別 python函式不指定特定的返回型別,甚至不需要指定是否返回乙個值 但實際上,每乙個python函式都會返回一 個值 如果執行了return語句,那麼它會返回這個值,否則,它返回乙個none none是pyth...

python 函式高階 python 函式高階

形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...

Python複習筆記(三)函式高階

在 python 中,列表變數呼叫 本質上是在執行列表變數的 extend 方法,不會修改變數的引用 這裡,難理解的就是generator和函式的執行流程不一樣。函式是順序執行,遇到return語句或者最後一行函式語句就返回。而變成generator的函式,在每次呼叫next 的時候執行,遇到yie...