Python中內(nèi)置函數(shù)filter函數(shù)用法詳解
引言
Python中的filter函數(shù)是一種內(nèi)置的高效過濾器,用于從序列中篩選出符合特定條件的元素,生成一個由符合條件元素組成的新列表。filter函數(shù)在Python中廣泛應(yīng)用于數(shù)據(jù)清洗和預(yù)處理,是Python開發(fā)者必備的技能之一。本文將詳細(xì)介紹filter函數(shù)的用法,并通過實(shí)例代碼闡述其應(yīng)用場景。
一、filter函數(shù)基本用法
語法結(jié)構(gòu)filter(function, iterable)
參數(shù)說明
- function:用于篩選元素的函數(shù),該函數(shù)應(yīng)返回一個布爾值,表示元素是否符合篩選條件。
- iterable:待篩選的序列,可以是列表、元組、集合等可迭代對象。
返回值filter函數(shù)返回一個由符合條件的元素組成的新列表。
二、filter函數(shù)應(yīng)用場景
1、篩選符合條件的元素
filter函數(shù)可以用于從序列中篩選出符合特定條件的元素。例如,從一個列表中篩選出所有偶數(shù):
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] even_numbers = filter(lambda x: x % 2 == 0, numbers) print(list(even_numbers)) # Output: [2, 4, 6, 8]
在這個例子中,我們傳遞了一個匿名函數(shù)作為filter函數(shù)的第一個參數(shù),該函數(shù)用于判斷一個數(shù)字是否為偶數(shù)。filter函數(shù)將這個函數(shù)應(yīng)用于序列中的每個元素,篩選出符合條件的偶數(shù)元素。
2、數(shù)據(jù)清洗和預(yù)處理
filter函數(shù)在數(shù)據(jù)清洗和預(yù)處理方面非常有用。例如,我們可以使用filter函數(shù)來刪除一個列表中的空字符串和None值:
strings = ['hello', '', 'world', None, 'python', 'programming'] clean_strings = filter(lambda x: x or x.strip(), strings) print(list(clean_strings)) # Output: ['hello', 'world', 'python', 'programming']
在這個例子中,我們傳遞了一個匿名函數(shù)作為filter函數(shù)的第一個參數(shù),該函數(shù)用于判斷一個字符串是否為非空字符串或者可以去除空格后的非空字符串。filter函數(shù)將這個函數(shù)應(yīng)用于序列中的每個元素,篩選出符合條件的非空字符串元素。
3、復(fù)雜條件篩選
filter函數(shù)也可以用于復(fù)雜條件的篩選。例如,我們可以使用filter函數(shù)來從一個列表中篩選出既是偶數(shù)又是正數(shù)的元素:
numbers = [-1, -2, 3, 4, -5, 6] positive_even_numbers = filter(lambda x: x > 0 and x % 2 == 0, numbers) print(list(positive_even_numbers)) # Output: [4, 6]
在這個例子中,我們傳遞了一個匿名函數(shù)作為filter函數(shù)的第一個參數(shù),該函數(shù)用于判斷一個數(shù)字是否為正數(shù)且為偶數(shù)。filter函數(shù)將這個函數(shù)應(yīng)用于序列中的每個元素,篩選出符合條件的正偶數(shù)元素。
4、與其他函數(shù)結(jié)合使用
filter函數(shù)可以與其他Python函數(shù)結(jié)合使用,以實(shí)現(xiàn)更復(fù)雜的篩選邏輯。例如,我們可以使用filter函數(shù)來篩選出一個列表中符合特定條件的元素,并使用map函數(shù)對篩選出的元素進(jìn)行進(jìn)一步處理。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] even_numbers = filter(lambda x: x % 2 == 0, numbers) squared_even_numbers = map(lambda x: x ** 2, even_numbers) print(list(squared_even_numbers)) # Output: [4, 16, 36, 64]
在這個例子中,我們首先使用filter函數(shù)篩選出列表中的偶數(shù)元素,然后使用map函數(shù)將篩選出的元素平方。最后,我們使用list函數(shù)將結(jié)果轉(zhuǎn)換為列表并打印輸出。
三、filter函數(shù)與lambda表達(dá)式
在上面的例子中,我們使用了lambda表達(dá)式作為filter函數(shù)的第一個參數(shù),用于定義篩選條件。Lambda表達(dá)式是一種簡潔的函數(shù)定義方式,可以在需要時定義簡單的匿名函數(shù)。
Lambda表達(dá)式的一般語法如下:
lambda arguments: expression
其中,arguments是函數(shù)的參數(shù)列表,expression是函數(shù)的主體部分,即函數(shù)的代碼塊。Lambda表達(dá)式可以看作是一種將函數(shù)定義、函數(shù)調(diào)用和返回結(jié)果融為一體的簡潔寫法。
四、filter函數(shù)與列表推導(dǎo)式
列表推導(dǎo)式是Python中一種高效的數(shù)據(jù)處理方法,可以用于將列表中的元素按照一定條件進(jìn)行篩選和轉(zhuǎn)換。列表推導(dǎo)式的語法如下:
[expression for item in iterable if condition]
其中,expression是表達(dá)式,用于對每個元素進(jìn)行轉(zhuǎn)換或處理;item是迭代器中的每個元素;iterable是待處理的序列;condition是篩選條件,用于判斷元素是否符合要求。
列表推導(dǎo)式與filter函數(shù)的結(jié)合使用可以實(shí)現(xiàn)更為復(fù)雜的數(shù)據(jù)處理需求。例如,下面的代碼將篩選出列表中的偶數(shù)元素,并將它們平方:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] even_numbers = [x ** 2 for x in numbers if x % 2 == 0] print(even_numbers) # Output: [4, 16, 36, 64]
在這個例子中,我們使用了列表推導(dǎo)式來篩選出列表中的偶數(shù)元素,并將它們平方。最終結(jié)果是一個包含所有篩選出的偶數(shù)元素的平方的新列表。
五、總結(jié)
filter函數(shù)是Python中一個非常實(shí)用的內(nèi)置函數(shù),可以用于從序列中篩選出符合特定條件的元素,生成一個由符合條件元素組成的新列表。通過掌握filter函數(shù)的用法,我們可以更方便地進(jìn)行數(shù)據(jù)清洗和預(yù)處理,實(shí)現(xiàn)更為復(fù)雜的數(shù)據(jù)處理需求。同時,掌握lambda表達(dá)式和列表推導(dǎo)式的用法也可以幫助我們更高效地使用filter函數(shù)。
補(bǔ)充:Python中使用filter過濾列表的一個小技巧
有的時候使用dir(Module),可以查看里面的方法,但是模塊自帶的屬性"__"開頭的也會顯示,如下:
>>> import random >>> dir(random) ['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', 'WichmannHill', '_Buil tinMethodType', '_MethodType', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_acos', '_c eil', '_cos', '_e', '_exp', '_hashlib', '_hexlify', '_inst', '_log', '_pi', '_random', '_sin', '_sqrt', '_test', '_test_ generator', '_urandom', '_warn', 'betavariate', 'choice', 'division', 'expovariate', 'gammavariate', 'gauss', 'getrandbi ts', 'getstate', 'jumpahead', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sam ple', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate'] >>>
這個時候想過濾以"_"或"__"開頭的方法,可以:
>>> filter(lambda s: not s.startswith("_"), dir(random)) ['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', 'WichmannHill', 'betav ariate', 'choice', 'division', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'jumpahead', 'lognormv ariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 't riangular', 'uniform', 'vonmisesvariate', 'weibullvariate'] >>>
從上面來看,使用filter()函數(shù),結(jié)合lambda函數(shù)很好的完成了任務(wù)。 其他的例子,比如想從一個列表中過濾非數(shù)字的字符串列表:
>>> L = ["1234", "ABCD", "BOOK"] >>> filter(lambda s: s.isdigit(), L) ['1234'] >>>
到此這篇關(guān)于Python中內(nèi)置函數(shù)filter函數(shù)用法的文章就介紹到這了,更多相關(guān)Python filter函數(shù)用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas學(xué)習(xí)之txt與sql文件的基本操作指南
Pandas是Python的第三方庫,提供高性能易用的數(shù)據(jù)類型和分析工具,下面這篇文章主要給大家介紹了關(guān)于pandas學(xué)習(xí)之txt與sql文件的基本操作指南,需要的朋友可以參考下2021-08-08使用Python和XPath解析動態(tài)JSON數(shù)據(jù)的操作指南
JSON動態(tài)數(shù)據(jù)在Python中扮演著重要的角色,為開發(fā)者提供了處理實(shí)時和靈活數(shù)據(jù)的能力,動態(tài)JSON數(shù)據(jù)的獲取可能涉及到網(wǎng)絡(luò)請求和API調(diào)用,可以使用Python和XPath來解析動態(tài)JSON數(shù)據(jù),接下來小編就給大家介紹一下操作步驟2023-09-09python實(shí)現(xiàn)批量獲取指定文件夾下的所有文件的廠商信息
這篇文章主要介紹了python實(shí)現(xiàn)批量獲取指定文件夾下的所有文件的廠商信息的方法,是非常實(shí)用的技巧,涉及到文件的讀寫與字典的操作等技巧,需要的朋友可以參考下2014-09-09詳解解Django 多對多表關(guān)系的三種創(chuàng)建方式
本文主要介紹了詳解解Django 多對多表關(guān)系的三種創(chuàng)建方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08使用python讀寫txt和json(jsonl)大文件的方法步驟
在Python中讀取txt和json(jsonl)大文件并保存到字典是一項非常常見的操作,這篇文章主要給大家介紹了關(guān)于使用python讀寫txt和json(jsonl)大文件的方法步驟,需要的朋友可以參考下2023-12-12Python讀取數(shù)據(jù)集并消除數(shù)據(jù)中的空行方法
今天小編就為大家分享一篇Python讀取數(shù)據(jù)集并消除數(shù)據(jù)中的空行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07