一、Filter函數概述
在Python中,Filter函數是一種靈活的過濾工具,用於篩選給定序列或可迭代對象中滿足指定條件的元素。其基本語法為:
filter(function, iterable)
其中,function是一個用於判斷元素是否符合條件的函數,iterable則是一個序列或可迭代對象,比如列表、元組、字符串等。Filter函數返回一個迭代器對象,其中僅包含滿足條件的元素。
二、Filter函數使用示例
1. 篩選列表中的偶數
使用Filter函數可以方便地篩選列表中的偶數:
num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_nums = list(filter(lambda x: x % 2 == 0, num_list))
print(even_nums) # [2, 4, 6, 8, 10]
如上代碼所示,我們通過定義一個lambda表達式作為Filter函數的第一個參數,判斷當前元素是否為偶數。然後通過list()函數將其轉換為列表。因此,even_nums僅包含num_list列表中的偶數。
2. 篩選字符串中的元音字母
我們也可以使用Filter函數來篩選字符串中的元音字母:
vowels = 'aeiou'
str = "Hello World"
filtered_str = ''.join(filter(lambda x: x in vowels, str))
print(filtered_str) # 'oeo'
如上代碼所示,我們定義了一個字符串vowels,其中包含了所有元音字母。然後我們使用Filter函數篩選出str字符串中的所有元音字母,並通過join()函數將其合併為一個字符串。因此,filtered_str字符串僅包含str字符串中的元音字母。
三、Filter函數的高級用法
1. Filter函數配合類方法
Filter函數還可以與類方法配合使用,篩選出符合特定條件的類實例。比如我們定義了一個學生類Student,其中有一個方法is_pass()用於判斷某個學生是否通過了考試,我們可以使用Filter函數篩選出通過考試的學生:
class Student:
def __init__(self, name, grade):
self.name = name
self.grade = grade
def is_pass(self):
return self.grade >= 60
students = [
Student('Tom', 68),
Student('Jerry', 45),
Student('Bob', 90),
Student('Alice', 78)
]
pass_students = list(filter(Student.is_pass, students))
print([s.name for s in pass_students]) # ['Tom', 'Bob', 'Alice']
如上代碼所示,我們定義了一個學生類Student,其中包含了學生的姓名和分數。is_pass方法用於判斷學生是否通過考試。我們使用Filter函數篩選出通過考試的學生,然後通過列表推導式獲取他們的姓名。
2. Filter函數中使用None
在定義lambda表達式時,有時我們並不需要使用函數,而想直接使用某個條件來過濾數據。此時,可以使用None來代替函數。例如,我們可以使用Filter函數篩選出字符串中的非空字符:
str = 'Hello World'
filtered_str = ''.join(filter(None, str))
print(filtered_str) # 'Hello World'
如上代碼所示,我們可以將lambda表達式替換為None,Filter函數將篩選出所有非空字符,並通過join函數將其合併為一個字符串。
3. Filter函數配合多個可迭代對象
在有些情況下,我們需要同時迭代多個可迭代對象,然後將篩選出滿足特定條件的元素。此時,我們可以使用Zip函數將多個可迭代對象打包成元組,再將它們作為Filter函數的輸入。例如,我們可以使用Filter函數篩選出學生中數學和英文都及格的人:
math_scores = [70, 80, 60, 45]
eng_scores = [80, 75, 90, 40]
students = ['Tom', 'Jerry', 'Bob', 'Alice']
passed_students = list(filter(lambda x: x[0] >= 60 and x[1] >= 60, zip(math_scores, eng_scores, students)))
print([s[2] for s in passed_students]) # ['Tom']
如上代碼所示,我們使用Zip函數將數學分數、英語分數和學生名字打包為元組,然後使用lambda表達式判斷當前元素是否同時滿足數學和英語都及格。然後,我們使用列表推導式獲取通過考試的學生名字。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/194738.html