前言
python內置了一些非常巧妙而且強大的內置函數,對初學者來說,一般不怎么用到,我也是用了一段時間python之后才發現,哇還有這么好的函數,這個函數都是經典的而且經過嚴格測試的,可以一下子省了你原來很多事情,代碼不僅簡潔易讀了很多,而且不用自己去閉門造車.既方便了自己又減少了bug。
一、sorted()
1)對于一個列表排序
1
2
|
sorted ([ 100 , 98 , 102 , 1 , 40 ]) >>>[ 1 , 40 , 98 , 100 , 102 ] |
2)通過key參數/函數
比如一個長列表里面嵌套了很多字典元素,我們要按照每個元素的長度大小排序
1
2
3
4
|
L = [{ 1 : 5 , 3 : 4 },{ 1 : 3 , 6 : 3 },{ 1 : 1 , 2 : 4 , 5 : 6 },{ 1 : 9 }] new_line = sorted (L,key = lambda x: len (x)) print (new_line) >>>[{ 1 : 9 }, { 1 : 5 , 3 : 4 }, { 1 : 3 , 6 : 3 }, { 1 : 1 , 2 : 4 , 5 : 6 }] |
3)對由tuple組成的List排序
比如下面是學生里面的年齡的一個list
1
2
3
|
students = [( 'wang' , 'A' , 15 ), ( 'li' , 'B' , 12 ), ( 'zhang' , 'B' , 10 )] print ( sorted (students, key = lambda student : student[ 2 ])) >>>[( 'zhang' , 'B' , 10 ), ( 'li' , 'B' , 12 ), ( 'wang' , 'A' , 15 )] |
4)用cmp函數排序
1
2
3
|
students = [( 'wang' , 'A' , 15 ), ( 'li' , 'B' , 12 ), ( 'zhang' , 'B' , 10 )] print ( sorted (students, cmp = lambda x,y : cmp (x[ 0 ], y[ 0 ])) ) >>>[( 'li' , 'B' , 12 ), ( 'wang' , 'A' , 15 ), ( 'zhang' , 'B' , 10 )] |
其實對于python的排序要仔細講,需要一整篇幅講它的排序算法,內容非常多,感興趣的可以去看一下源碼,看它是如何設計的,這里只是先點一下.
二、map()
map可以根據提供的函數對指定序列做映射,它接受一個函數f和一個list,并通過把函數f以此作用在list上的每個元素,然后返回一個新的list,map函數的入參也可以是多個.注意這個函數一定要有返回值(值值值重要的說三遍)。
不然就會返回新的list 類似[None, None, None, None, None, None, None, None, None]
適合的場景是對列表里面的一些元素需要重復的操作,用map就可以輕松搞定.
三、enumerate()
Python中,迭代永遠是取出元素本身,而非元素的索引,有的時候我們需要知道元素的索引比如在一個很長的列表里面是一些網站名,我們希望在打印的時候,也能列出索引。若沒有這個函數,我們需要在加一個變量,在循環打印的時候讓這個計數變量遞增,現在有了enumerate,就不用這么麻煩了,直接搞定.
四、zip()
zip函數接受任意多個(包括0個和1個)序列作為參數,返回一個tuple列表
1
2
3
4
5
|
x = [ 1 , 2 , 3 ] y = [ 4 , 5 , 6 ] z = [ 7 , 8 , 9 ] xyz = zip (x, y, z) >> print xyz |
這個函數特別是在構建字典序列的時候非常方便 (這招非常巧妙,大家可以仔細揣摩)
五、filter()
filter函數接受一個函數f和一個list,這個函數f的作用是對每個元素進行判斷,返回True或者False,這樣可以過濾掉一些不符合條件的元素,然后返回符合條件的list.
1
2
3
4
|
def is_even(x): return x % 2 = = 0 print ( filter (is_even,[ 1 , 2 , 3 , 4 , 5 ])) >>>[ 2 , 4 ] |
特別是在處理文件的時候,需要把一些空格,回車和空字符去掉
六、reduce()
reduce函數的用法和map很類似,也是一個函數f和一個list,但是函數的入口參數一定要是兩個,reduce也是對每個元素進行反復調用,最后返回最終的值,而map是返回一個list
注意:在python3里面reduce已經從全局函數里面移除了,需要用的話要from functools import reduce
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:https://ask.hellobi.com/blog/caoniao_xueyuan/7064