map是把函數(shù)調(diào)用的結(jié)果放在列表里面返回,它也可以接受多個(gè) iterable,在第n次調(diào)用function時(shí),將使用iterable1[n], iterable2[n], ...作為參數(shù)。
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的樺南網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
filter(function, iterable)
這個(gè)函數(shù)的功能是過(guò)濾出iterable中所有以元素自身作為參數(shù)調(diào)用function時(shí)返回True或bool(返回值)為True的元素并以列表返回.
def f_large_than_5(x):
return x 5
filter(f_large_than_5, range(10))
[6,7,8,9]
不會(huì)死循環(huán),生成器是個(gè)虛擬抽象的概念,你可以認(rèn)為_(kāi)odd_iter()?primes() 里面運(yùn)行的時(shí)候
python解釋器并不生成實(shí)際的List,也就不會(huì)耗費(fèi)內(nèi)存和時(shí)間
真正分配給List內(nèi)存只在以下過(guò)程, primes()這個(gè)生成器是逐步分配內(nèi)存的!!
for?n?in?primes():
if?n1000:
print(n)
else:
break
另外提醒你下,你的程序只能在Python 3.x版本下正確運(yùn)行:-)因?yàn)槟阌玫氖?filter返回生成器對(duì)象的用法?。∪绻阋愕某绦蛟赑ython 2.x正確運(yùn)行,需改成如下形式。
根據(jù)你最新的追問(wèn),“為什么it=filter(lambda x : x%n0 ,it)不行??“直接在filter里用Lambda表達(dá)式是完全可以的,你的原因是你的Lambda表達(dá)式漏輸入了一個(gè)n,請(qǐng)看如下形式.
#?Python?2.x下需導(dǎo)入itertools庫(kù)的ifilter才能和python?3.x的filter等效
import?itertools
def?_odd_iter():
n=1
while?True:
n=n+2
yield?n
def?_not_divisible(n):
return?lambda?x:x%n0
def?primes():
yield?2
it=_odd_iter()
while?True:
n=next(it)
yield?n
#it=itertools.ifilter(_not_divisible(n),it)
it?=?itertools.ifilter(lambda?x,?n=n:?x%n??0,?it)
for?n?in?primes():
if?n1000:
print(n)
else:
break
Python解釋器內(nèi)置了許多函數(shù),這意味著我們無(wú)需定義,始終可以它們。下面按照函數(shù)的字母順序,討論一些常用的內(nèi)建函數(shù)。
eval()
eval()函數(shù)解析傳給它的表達(dá)式,并在程序中運(yùn)行Python表達(dá)式(代碼)。舉個(gè)例子:
x?=?1
eval("x?+?1")??#?注意:"x?+?1"是字符串
2
eval("4??9")
True
eval("'py'?*?3")
'pypypy'
eval("10?**?2")
100
eval()函數(shù)不僅僅能運(yùn)行簡(jiǎn)單表達(dá)式,還能調(diào)用函數(shù),使用方法等等:
eval("abs(-11)")????????#?計(jì)算-11的絕對(duì)值
11
eval('"hello".upper()')???#?把字符串'hello'全變成大寫字母
'HELLO'
import?os
eval('os.getcwd()')???????#?獲取當(dāng)前的工作目錄
'/home/thepythonguru'
但是需要注意的是eval()僅適用于表達(dá)式,嘗試傳遞語(yǔ)句會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤:
eval('a?=?1')????????????????????#?賦值語(yǔ)句
Traceback?(most?recent?call?last):
File?"",?line?1,?in
File?"",?line?1
a?=?1
^
SyntaxError:?invalid?syntax
eval('import?re')?????????????#?導(dǎo)入語(yǔ)句
Traceback?(most?recent?call?last):
File?"",?line?1,?in
File?"",?line?1
import?re
^
SyntaxError:?invalid?syntax
此外,使用eval()語(yǔ)句應(yīng)該十分小心,永遠(yuǎn)不要將不受信任的源直接傳遞給eval()。 因?yàn)閻阂庥脩艉苋菀讓?duì)您的系統(tǒng)造成破壞。 例如:
eval(input())??#?eval()將執(zhí)行用戶輸入的代碼
用戶輸入以下代碼就能從系統(tǒng)中刪除所有文件:
os.system("RM?-RF?/")
#?上面輸入相當(dāng)于執(zhí)行:
eval('os.system("RM?-RF?/")')
filter()
"filter"的意思是“過(guò)濾”,filter()函數(shù)需要兩個(gè)參數(shù):一個(gè)函數(shù)對(duì)象和一個(gè)可迭代對(duì)象。函數(shù)對(duì)象需要返回一個(gè)布爾值,并為可迭代的每個(gè)元素調(diào)用。 filter()函數(shù)僅返回那些通過(guò)函數(shù)對(duì)象返回值為true的元素。解釋有一些抽象,看一個(gè)例子:
a?=?[1,?2,?3,?4,?5,?6]
filter(lambda?x?:?x?%?2?==?0,?a)????????#?過(guò)濾出所有偶數(shù),結(jié)果返回一個(gè)filter對(duì)象
filter?object?at?0x1036dc048
list(filter(lambda?x?:?x?%?2?==?0,?a))??#?可以使用list()函數(shù)使fileter對(duì)象變成列表,方便查看結(jié)果
[2,?4,?6]
下面是另外一個(gè)例子:
dict_a?=?[{'name':?'python',?'points':?10},?{'name':?'java',?'points':?8}]
filter(lambda?x?:?x['name']?==?'python',?dict_a)??#?過(guò)濾出列表中鍵'name'為值'python'的字典
filter?object?at?0x1036de128
tuple(filter(lambda?x?:?x['name']?==?'python',?dict_a))??#?使用tuple()函數(shù)使結(jié)果變成字典
({'name':?'python',?'points':?10},)
float()
float()的參數(shù)是一個(gè)數(shù)字或者字符串,它返回一個(gè)浮點(diǎn)數(shù)。如果參數(shù)是字符串,則字符串中應(yīng)該包含一個(gè)數(shù)字,并可以在數(shù)字前加入一個(gè) '-' 符號(hào),代表負(fù)數(shù)。參數(shù)也可以是表示NaN(非數(shù)字)或正無(wú)窮大的字符串。如果沒(méi)有任何參數(shù)的話,將返回0.0。
float('+1.23')?????????#?1.23
1.23
float('???-12345\n')???#?-12345
-12345.0
float('1e-003')????????#?0.001
0.001
float('+1E6')??????????#?10的6次冪
1000000.0
float('-Infinity')?????#?無(wú)窮小
-inf
float('-inf')?+?100?????#?負(fù)無(wú)窮小加100仍等于負(fù)無(wú)窮小
-inf
float('inf')???????????#?無(wú)窮大
inf
float('NaN')???????????#?NaN,代表非數(shù)字
nan
關(guān)于Python的基礎(chǔ)問(wèn)題可以看下這個(gè)網(wǎng)頁(yè)的視頻教程,網(wǎng)頁(yè)鏈接,希望我的回答能幫到你。
map() 函數(shù)接受兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是可迭代對(duì)象(Iterable), map 將傳入的函數(shù)依次作用到可迭代對(duì)象的每一個(gè)元素,并把結(jié)果作為迭代器(Iterator)返回。
舉例說(shuō)明,有一個(gè)函數(shù) f(x)=x^2 ,要把這個(gè)函數(shù)作用到一個(gè)list [1,2,3,4,5,6,7,8,9] 上:
運(yùn)用簡(jiǎn)單的循環(huán)可以實(shí)現(xiàn):
運(yùn)用高階函數(shù) map() :
結(jié)果 r 是一個(gè)迭代器,迭代器是惰性序列,通過(guò) list() 函數(shù)讓它把整個(gè)序列都計(jì)算出來(lái)并返回一個(gè) list 。
如果要把這個(gè)list所有數(shù)字轉(zhuǎn)為字符串利用 map() 就簡(jiǎn)單了:
小練習(xí):利用 map() 函數(shù),把用戶輸入的不規(guī)范的英文名字變?yōu)槭鬃帜复髮懫渌懙囊?guī)范名字。輸入 ['adam', 'LISA', 'barT'] ,輸出 ['Adam', 'Lisa', 'Bart']
reduce() 函數(shù)也是接受兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是可迭代對(duì)象, reduce 將傳入的函數(shù)作用到可迭代對(duì)象的每個(gè)元素的結(jié)果做累計(jì)計(jì)算。然后將最終結(jié)果返回。
效果就是: reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
舉例說(shuō)明,將序列 [1,2,3,4,5] 變換成整數(shù) 12345 :
小練習(xí):編寫一個(gè) prod() 函數(shù),可以接受一個(gè) list 并利用 reduce 求積:
map() 和 reduce() 綜合練習(xí):編寫 str2float 函數(shù),把字符串 '123.456' 轉(zhuǎn)換成浮點(diǎn)型 123.456
filter() 函數(shù)用于過(guò)濾序列, filter() 也接受一個(gè)函數(shù)和一個(gè)序列, filter() 把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是 True 還是 False 決定保留還是丟棄該元素。
舉例說(shuō)明,刪除list中的偶數(shù):
小練習(xí):用 filter() 求素?cái)?shù)
定義一個(gè)篩選函數(shù):
定義一個(gè)生成器不斷返回下一個(gè)素?cái)?shù):
打印100以內(nèi)素?cái)?shù):
python內(nèi)置的 sorted() 函數(shù)可以對(duì)list進(jìn)行排序:
sorted() 函數(shù)也是一個(gè)高階函數(shù),還可以接受一個(gè) key 函數(shù)來(lái)實(shí)現(xiàn)自定義排序:
key 指定的函數(shù)將作用于list的每一個(gè)元素上,并根據(jù) key 函數(shù)返回的結(jié)果進(jìn)行排序.
默認(rèn)情況下,對(duì)字符串排序,是按照ASCII的大小比較的,由于'Z' 'a',結(jié)果,大寫字母Z會(huì)排在小寫字母a的前面。如果想忽略大小寫可都轉(zhuǎn)換成小寫來(lái)比較:
要進(jìn)行反向排序,不必改動(dòng)key函數(shù),可以傳入第三個(gè)參數(shù) reverse=True :
小練習(xí):假設(shè)我們用一組tuple表示學(xué)生名字和成績(jī): L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] 。用sorted()對(duì)上述列表分別按c成績(jī)從高到低排序:
運(yùn)用匿名函數(shù)更簡(jiǎn)潔:
文章名稱:python過(guò)濾的函數(shù) filter函數(shù)的用法python
網(wǎng)站路徑:http://aaarwkj.com/article0/doodcio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、標(biāo)簽優(yōu)化、定制網(wǎng)站、自適應(yīng)網(wǎng)站、App開(kāi)發(fā)、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)