Python中內置函數(shù)filter函數(shù)用法詳解
引言
Python中的filter函數(shù)是一種內置的高效過濾器,用于從序列中篩選出符合特定條件的元素,生成一個由符合條件元素組成的新列表。filter函數(shù)在Python中廣泛應用于數(shù)據(jù)清洗和預處理,是Python開發(fā)者必備的技能之一。本文將詳細介紹filter函數(shù)的用法,并通過實例代碼闡述其應用場景。
一、filter函數(shù)基本用法
語法結構filter(function, iterable)
參數(shù)說明
- function:用于篩選元素的函數(shù),該函數(shù)應返回一個布爾值,表示元素是否符合篩選條件。
- iterable:待篩選的序列,可以是列表、元組、集合等可迭代對象。
返回值filter函數(shù)返回一個由符合條件的元素組成的新列表。
二、filter函數(shù)應用場景
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ù)應用于序列中的每個元素,篩選出符合條件的偶數(shù)元素。
2、數(shù)據(jù)清洗和預處理
filter函數(shù)在數(shù)據(jù)清洗和預處理方面非常有用。例如,我們可以使用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ù)應用于序列中的每個元素,篩選出符合條件的非空字符串元素。
3、復雜條件篩選
filter函數(shù)也可以用于復雜條件的篩選。例如,我們可以使用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ù)應用于序列中的每個元素,篩選出符合條件的正偶數(shù)元素。
4、與其他函數(shù)結合使用
filter函數(shù)可以與其他Python函數(shù)結合使用,以實現(xiàn)更復雜的篩選邏輯。例如,我們可以使用filter函數(shù)來篩選出一個列表中符合特定條件的元素,并使用map函數(shù)對篩選出的元素進行進一步處理。
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ù)將結果轉換為列表并打印輸出。
三、filter函數(shù)與lambda表達式
在上面的例子中,我們使用了lambda表達式作為filter函數(shù)的第一個參數(shù),用于定義篩選條件。Lambda表達式是一種簡潔的函數(shù)定義方式,可以在需要時定義簡單的匿名函數(shù)。
Lambda表達式的一般語法如下:
lambda arguments: expression
其中,arguments是函數(shù)的參數(shù)列表,expression是函數(shù)的主體部分,即函數(shù)的代碼塊。Lambda表達式可以看作是一種將函數(shù)定義、函數(shù)調用和返回結果融為一體的簡潔寫法。
四、filter函數(shù)與列表推導式
列表推導式是Python中一種高效的數(shù)據(jù)處理方法,可以用于將列表中的元素按照一定條件進行篩選和轉換。列表推導式的語法如下:
[expression for item in iterable if condition]
其中,expression是表達式,用于對每個元素進行轉換或處理;item是迭代器中的每個元素;iterable是待處理的序列;condition是篩選條件,用于判斷元素是否符合要求。
列表推導式與filter函數(shù)的結合使用可以實現(xiàn)更為復雜的數(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]
在這個例子中,我們使用了列表推導式來篩選出列表中的偶數(shù)元素,并將它們平方。最終結果是一個包含所有篩選出的偶數(shù)元素的平方的新列表。
五、總結
filter函數(shù)是Python中一個非常實用的內置函數(shù),可以用于從序列中篩選出符合特定條件的元素,生成一個由符合條件元素組成的新列表。通過掌握filter函數(shù)的用法,我們可以更方便地進行數(shù)據(jù)清洗和預處理,實現(xiàn)更為復雜的數(shù)據(jù)處理需求。同時,掌握lambda表達式和列表推導式的用法也可以幫助我們更高效地使用filter函數(shù)。
補充: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ù),結合lambda函數(shù)很好的完成了任務。 其他的例子,比如想從一個列表中過濾非數(shù)字的字符串列表:
>>> L = ["1234", "ABCD", "BOOK"] >>> filter(lambda s: s.isdigit(), L) ['1234'] >>>
到此這篇關于Python中內置函數(shù)filter函數(shù)用法的文章就介紹到這了,更多相關Python filter函數(shù)用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Python和XPath解析動態(tài)JSON數(shù)據(jù)的操作指南
JSON動態(tài)數(shù)據(jù)在Python中扮演著重要的角色,為開發(fā)者提供了處理實時和靈活數(shù)據(jù)的能力,動態(tài)JSON數(shù)據(jù)的獲取可能涉及到網絡請求和API調用,可以使用Python和XPath來解析動態(tài)JSON數(shù)據(jù),接下來小編就給大家介紹一下操作步驟2023-09-09python實現(xiàn)批量獲取指定文件夾下的所有文件的廠商信息
這篇文章主要介紹了python實現(xiàn)批量獲取指定文件夾下的所有文件的廠商信息的方法,是非常實用的技巧,涉及到文件的讀寫與字典的操作等技巧,需要的朋友可以參考下2014-09-09詳解解Django 多對多表關系的三種創(chuàng)建方式
本文主要介紹了詳解解Django 多對多表關系的三種創(chuàng)建方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-08-08使用python讀寫txt和json(jsonl)大文件的方法步驟
在Python中讀取txt和json(jsonl)大文件并保存到字典是一項非常常見的操作,這篇文章主要給大家介紹了關于使用python讀寫txt和json(jsonl)大文件的方法步驟,需要的朋友可以參考下2023-12-12Python讀取數(shù)據(jù)集并消除數(shù)據(jù)中的空行方法
今天小編就為大家分享一篇Python讀取數(shù)據(jù)集并消除數(shù)據(jù)中的空行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07