在Python中敬惦,filter()
是一個(gè)內(nèi)置函數(shù)碑宴,用于根據(jù)指定條件篩選可迭代對(duì)象中的元素裆甩,并返回一個(gè)新的可迭代對(duì)象之斯,其中包含滿足條件的元素光涂。
filter()
函數(shù)的語(yǔ)法如下:
filter(function, iterable)
其中庞萍,function
是一個(gè)用于篩選的函數(shù),iterable
是一個(gè)可迭代對(duì)象忘闻,可以是列表钝计、元組、集合等服赎。
filter()
函數(shù)的工作原理如下:
- 對(duì)可迭代對(duì)象中的每個(gè)元素葵蒂,依次調(diào)用
function
函數(shù),并傳遞該元素作為參數(shù)重虑。 - 如果
function
函數(shù)返回值為True
践付,則將該元素保留到結(jié)果中;如果返回值為False
缺厉,則將該元素過濾掉永高。 - 最后,
filter()
函數(shù)返回一個(gè)新的可迭代對(duì)象提针,其中包含滿足條件的元素命爬。
以下示例演示了filter()
函數(shù)的用法:
# 篩選出列表中的偶數(shù)
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(filtered_numbers))
>>> [2, 4, 6, 8, 10]
# 篩選出字符串列表中長(zhǎng)度大于3的字符串
words = ["apple", "banana", "car", "dog", "elephant"]
filtered_words = filter(lambda x: len(x) > 3, words)
print(list(filtered_words))
>>> ['apple', 'banana', 'elephant']
# 過濾掉Python中布爾值是False的對(duì)象,比如長(zhǎng)度為0的對(duì)象(如空列表或空字符串)或在數(shù)字上等于0的對(duì)象辐脖。
words = [11, False, 18, 21, "", 12, 34, 0, [], {}]
filtered_words = filter(None, words)
print(list(filtered_words))
>>> [11, 18, 21, 12, 34]
在上述示例中饲宛,我們使用了匿名函數(shù)(lambda函數(shù))作為function
參數(shù)來定義篩選條件。您也可以使用自定義函數(shù)來替代匿名函數(shù)嗜价。
需要注意的是艇抠,filter()
函數(shù)返回的結(jié)果是一個(gè)迭代器幕庐,若需要使用列表或其他容器類型,可以通過將返回值轉(zhuǎn)換為列表來實(shí)現(xiàn)家淤,如list(filter(...))
异剥。