您好,登錄后才能下訂單哦!
1. 過濾器
Python 具有通過列表解析 將列表映射到其它列表的強(qiáng)大能力。這種能力同過濾機(jī)制結(jié)合使用,使列表中的有些元素被映射的同時(shí)跳過另外一些元素。
過濾列表語法: [ mapping-expression for element in source-list if filter-expression ]
這是列表解析的擴(kuò)展,前三部分都是相同的,最后一部分,以 if開頭的是過濾器表達(dá)式。過濾器表達(dá)式可以是返回值為真或者假的任何表達(dá)式 (在 Python 中是幾乎任何東西)。任何經(jīng)過濾器表達(dá)式演算值為真的元素都可以包含在映射中,其它的元素都將忽略,它們不會(huì)進(jìn)入映射表達(dá)式,更不會(huì)包含在輸出列表中。
列表過濾介紹
>>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"] >>> [elem for elem in li if len(elem) > 1] ['mpilgrim', 'foo'] // 由于 Python 會(huì)遍歷整個(gè)列表,它將對(duì)每個(gè)元素執(zhí)行過濾器表達(dá)式,如果過濾器表達(dá)式演算值為真,該元素就會(huì)被映射,同時(shí)映射表達(dá)式的結(jié)果將包含在返回的列表中,這里過濾掉了所有單字符的字符串,留下了一個(gè)由長字符串構(gòu)成的列表。 >>> [elem for elem in li if elem != "b"] ['a', 'mpilgrim', 'foo', 'c', 'd', 'd'] // 這里過濾掉了一個(gè)特定值 b ,注意這個(gè)過濾器會(huì)過濾掉所有的 b, 因?yàn)槊看稳〕?b, 過濾表達(dá)式都將為假。 >>> [elem for elem in li if li.count(elem) == 1] ['a', 'mpilgrim', 'foo', 'c'] // count 是一個(gè)列表方法,返回某個(gè)值在列表中出現(xiàn)的次數(shù),你可以認(rèn)為這個(gè)過濾器將從列表中刪除重復(fù)元素,返回一個(gè)只包含了在原始列表中有著唯一值拷貝的列表。但并非如此,因?yàn)樵谠剂斜碇谐霈F(xiàn)兩次的值 (在本例中, b 和 d ) 被完全剔除了,從一個(gè)列表中排除重復(fù)值有多種方法,但過濾并不是其中的一種。
filter 內(nèi)置函數(shù)
Python2.7.13官方文檔中的介紹: filter(function, iterable) Construct a list from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If iterable is a string or a tuple, the result also has that type; otherwise it is always a list. If function is None, the identity function is assumed, that is, all elements of iterable that are false are removed.
Note that filter(function, iterable) is equivalent to [item for item in iterable if function(item)] if function is not None and [item for item in iterable if item] if function is None.
See itertools.ifilter() and itertools.ifilterfalse() for iterator versions of this function, including a variation that filters for elements where the function returns false.
Python內(nèi)建的filter()函數(shù)用于過濾序列
// 保留長度大于1的字符串 >>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"] >>> def func(s): ... return len(s) > 1 >>> filter(func,li) ['mpilgrim', 'foo'] // 刪除奇數(shù) >>> def del_odd(n): ... return n % 2 == 0 >>> filter(del_odd,[0,1,2,3,4,5,6,7,8,9]) [0, 2, 4, 6, 8]
2. lambda函數(shù)
Python 支持一種有趣的語法, 它允許你快速定義單行的最小函數(shù), 這些叫做
lambda 的函數(shù), 是從 Lisp 借用來的, 可以用在任何需要函數(shù)的地方。
>>> def f(x): ... return x*2 >>> f(3) 6 >>> g = lambda x : x*2 >>> g(3) 6 // 這是一個(gè) lambda 函數(shù),完成同上面普通函數(shù)相同的事情。注意這里的簡(jiǎn)短的語法:在參數(shù)列表周圍沒有括號(hào),而且忽略了 return 關(guān)鍵字 (隱含存在,因?yàn)檎麄€(gè)函數(shù)只有一行)。而且,該函數(shù)沒有函數(shù)名稱,但是可以將它賦值給一個(gè)變量進(jìn)行調(diào)用。 >>> (lambda x : x*2)(3) 6 // 使用 lambda 函數(shù)時(shí)甚至不需要將它賦值給一個(gè)變量。
總的來說, lambda 函數(shù)可以接收任意多個(gè)參數(shù) (包括可選參數(shù)) 并且返回單個(gè)表達(dá)式的值。 lambda 函數(shù)不能包含命令, 包含的表達(dá)式不能超過一個(gè), 不要試圖向 lambda 函數(shù)中塞入太多的東西, 如果你需要更復(fù)雜的東西, 應(yīng)該定義一個(gè)普通函數(shù), 然后想讓它多長就多長。
Note: lambda函數(shù) 是可選的, 它是一種風(fēng)格問題,不一定非要使用它們,任何能夠使用它們的地方,都可以定義一個(gè)單獨(dú)的普通函數(shù)來進(jìn)行替換,應(yīng)將它們用在需要封裝特殊的、非重用代碼上,避免代碼充斥著大量單行函數(shù)。
以上這篇對(duì)python過濾器和lambda函數(shù)的用法詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。