Python高級(jí)過(guò)濾器之filter函數(shù)詳解
簡(jiǎn)介
在Python中,filter()是一個(gè)非常有用的內(nèi)置函數(shù),它能夠根據(jù)指定的函數(shù)來(lái)篩選出可迭代對(duì)象中滿足條件的元素,返回一個(gè)迭代器。filter()函數(shù)的使用能夠簡(jiǎn)化代碼,并提高程序的可讀性。本文將從入門(mén)到精通,全面介紹filter()函數(shù)的用法和相關(guān)知識(shí)點(diǎn)。
1. filter()函數(shù)的基本用法
filter()函數(shù)的基本語(yǔ)法如下:
filter(function, iterable)
其中,function是一個(gè)用于判斷的函數(shù),iterable是一個(gè)可迭代對(duì)象,可以是列表、元組、集合或字符串等。filter()會(huì)將iterable中的每個(gè)元素依次傳給function進(jìn)行判斷,返回滿足條件的元素組成的迭代器。 讓我們來(lái)看一個(gè)簡(jiǎn)單的例子,使用filter()函數(shù)過(guò)濾出列表中的偶數(shù):
# 定義一個(gè)函數(shù),判斷是否為偶數(shù) def is_even(num): return num % 2 == 0 # 待篩選的列表 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 使用filter函數(shù)過(guò)濾出偶數(shù) filtered_numbers = filter(is_even, numbers) # 將filter的結(jié)果轉(zhuǎn)換為列表 result = list(filtered_numbers) print(result) # 輸出: [2, 4, 6, 8, 10]
2. 使用Lambda表達(dá)式進(jìn)一步簡(jiǎn)化代碼
有時(shí)候,我們只需要使用一次性的簡(jiǎn)單函數(shù)進(jìn)行篩選,此時(shí)可以使用Lambda表達(dá)式,從而省略單獨(dú)定義函數(shù)的步驟,使代碼更加簡(jiǎn)潔。以上面的例子為例,我們可以改寫(xiě)為:
# 待篩選的列表 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 使用Lambda表達(dá)式過(guò)濾出偶數(shù) filtered_numbers = filter(lambda x: x % 2 == 0, numbers) # 將filter的結(jié)果轉(zhuǎn)換為列表 result = list(filtered_numbers) print(result) # 輸出: [2, 4, 6, 8, 10]
3. filter()函數(shù)的返回值是迭代器
需要注意的是,filter()函數(shù)的返回值是一個(gè)迭代器(Iterator),而不是列表。這意味著在進(jìn)行一次迭代之后,迭代器中的元素就會(huì)被耗盡。如果需要多次訪問(wèn)結(jié)果,可以將它轉(zhuǎn)換為列表或使用循環(huán)來(lái)逐個(gè)訪問(wèn)。
# 待篩選的列表 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 使用Lambda表達(dá)式過(guò)濾出偶數(shù) filtered_numbers = filter(lambda x: x % 2 == 0, numbers) # 轉(zhuǎn)換為列表 result_list = list(filtered_numbers) print(result_list) # 輸出: [2, 4, 6, 8, 10] # 再次嘗試訪問(wèn)迭代器中的元素將為空 for num in filtered_numbers: print(num) # 不會(huì)輸出任何內(nèi)容
4. 過(guò)濾多個(gè)可迭代對(duì)象
filter()函數(shù)還可以同時(shí)過(guò)濾多個(gè)可迭代對(duì)象,此時(shí)傳入的函數(shù)應(yīng)該接受相應(yīng)數(shù)量的參數(shù)。filter()會(huì)將多個(gè)可迭代對(duì)象中的元素按位置一一傳入函數(shù)進(jìn)行判斷。
# 定義一個(gè)函數(shù),判斷兩個(gè)數(shù)之和是否為偶數(shù) def sum_is_even(a, b): return (a + b) % 2 == 0 # 待篩選的列表 numbers1 = [1, 2, 3, 4, 5] numbers2 = [10, 20, 30, 40, 50] # 使用filter函數(shù)過(guò)濾出兩個(gè)數(shù)之和為偶數(shù) filtered_numbers = filter(sum_is_even, numbers1, numbers2) # 將filter的結(jié)果轉(zhuǎn)換為列表 result = list(filtered_numbers) print(result) # 輸出: [3, 5]
5. 使用None作為判斷函數(shù)
在某些情況下,我們可能希望直接使用filter()函數(shù)來(lái)過(guò)濾掉可迭代對(duì)象中的一些"假值",例如空字符串、零等。此時(shí),可以將filter()的函數(shù)參數(shù)設(shè)置為None,filter()函數(shù)會(huì)自動(dòng)過(guò)濾掉那些判斷為假的元素。
# 待篩選的列表,包含一些空字符串和非空字符串 words = ["hello", "", "world", " ", "python", ""] # 使用filter函數(shù)過(guò)濾掉空字符串 filtered_words = filter(None, words) # 將filter的結(jié)果轉(zhuǎn)換為列表 result = list(filtered_words) print(result) # 輸出: ["hello", "world", " ", "python"]
6. 綜合示例:篩選出年齡大于等于18歲的成年人
下面我們來(lái)看一個(gè)綜合示例,通過(guò)filter()函數(shù)從一個(gè)字典列表中篩選出年齡大于等于18歲的成年人。
# 待篩選的字典列表,每個(gè)字典包含姓名和年齡信息 people = [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 17}, {"name": "Charlie", "age": 19}, {"name": "David", "age": 15}, {"name": "Eva", "age": 22}, ] # 定義一個(gè)函數(shù),判斷是否為成年人(年齡大于等于18歲) def is_adult(person): return person["age"] >= 18 # 使用filter函數(shù)過(guò)濾出成年人 adults = filter(is_adult, people) # 將filter的結(jié)果轉(zhuǎn)換為列表 adults_list = list(adults) print(adults_list) # 輸出: [{'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 19}, {'name': 'Eva', 'age': 22}]
7. 總結(jié)
本文詳細(xì)介紹了filter()函數(shù)在Python中的用法,從基本的使用方法到進(jìn)階的應(yīng)用,包括使用Lambda表達(dá)式、過(guò)濾多個(gè)可迭代對(duì)象、使用None作為判斷函數(shù)等。filter()函數(shù)是Python中一個(gè)強(qiáng)大且靈活的工具,能夠簡(jiǎn)化代碼并提高開(kāi)發(fā)效率。通過(guò)掌握f(shuō)ilter()函數(shù)的各種用法,你可以更加高效地處理可迭代對(duì)象,實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。希望本文能夠幫助你深入理解和應(yīng)用filter()函數(shù)。
到此這篇關(guān)于Python高級(jí)過(guò)濾器之filter函數(shù)詳解的文章就介紹到這了,更多相關(guān)Python filter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?合并/拆分Excel的實(shí)現(xiàn)示例
有時(shí)對(duì)于多個(gè)工作表需要進(jìn)行合并或拆分,以便進(jìn)行瀏覽總結(jié),本文主要介紹了Python?合并/拆分Excel的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09python爬取w3shcool的JQuery課程并且保存到本地
本文主要介紹python爬取w3shcool的JQuery的課程并且保存到本地的方法解析。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04python關(guān)于os.walk函數(shù)查找windows文件方式
這篇文章主要介紹了python關(guān)于os.walk函數(shù)查找windows文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08pytorch中.numpy()、.item()、.cpu()、.detach()以及.data的使用方法
這篇文章主要給大家介紹了關(guān)于pytorch中.numpy()、.item()、.cpu()、.detach()以及.data的使用方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-08-08Python+Pytorch實(shí)戰(zhàn)之彩色圖片識(shí)別
這篇文章主要為大家詳細(xì)介紹了如何利用Python+Pytorch實(shí)現(xiàn)彩色圖片識(shí)別功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-09-09解決pip安裝tensorflow中出現(xiàn)的no module named tensorflow.python 問(wèn)題方法
這篇文章主要介紹了解決pip安裝tensorflow中出現(xiàn)的no module named tensorflow.python 問(wèn)題方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02用Python獲取智慧校園每日課表并自動(dòng)發(fā)送至郵箱
很多小伙伴們都在為查看智慧校園課表而煩惱,今天特地整理了這篇文章,不僅可以用Python獲取智慧校園每日課表,還會(huì)自動(dòng)發(fā)至你郵箱,需要的朋友可以參考下2021-05-05