欢迎访问宙启技术站
智能推送

如何使用Python filter()函数过滤列表

发布时间:2023-06-06 06:06:50

Python中的filter()函数是一个内置函数,它允许您使用一个函数来过滤一个列表中的元素。该函数接受两个参数:一个函数和一个可迭代对象(通常是列表或元组)。该函数应该返回一个布尔值,控制传递给它的元素是否被过滤掉。

例如,假设有一个列表:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

如果想要使用filter()函数,只保留其中的偶数,可以这样写:

def is_even(num):

    return num % 2 == 0

even_numbers = list(filter(is_even, numbers))

print(even_numbers)

输出结果为[2, 4, 6, 8, 10]。

在这个例子中,我们定义了一个函数is_even(),它接受一个数值作为参数,并返回一个布尔值,表示传递的数值是否为偶数。我们使用这个函数作为filter()函数的 个参数,告诉它只保留那些被is_even()函数返回True的元素。

使用lambda表达式简化

上面的示例中定义了一个名为is_even()的函数来检查奇偶性。但是,由于该函数非常简单,因此可以使用lambda表达式来简化该代码。

如下所示:

even_numbers = list(filter(lambda x: x % 2 == 0, numbers))

在这个例子中,我们使用lambda表达式代替了is_even()函数,并将其作为filter()函数的 个参数。lambda表达式相当于一个匿名函数,可以在需要时替换它。第二个参数numbers是我们要过滤的可迭代对象。

使用filter()函数过滤字符串列表

除了数字列表,还可以使用filter()函数过滤字符串列表。对于字符串,可以使用len()函数来检查它们的长度,并使用filter()函数只保留长度大于4的字符串。

如下所示:

words = ["apple", "banana", "cherry", "pear", "orange"]

long_words = list(filter(lambda x: len(x) > 4, words))

print(long_words)

将输出['apple', 'banana', 'cherry', 'orange']。在这个例子中,使用了一个lambda函数来检查每个字符串的长度是否大于4。filter()函数只保留那些符合要求的字符串。

使用filter()函数过滤复杂对象

我们还可以使用filter()函数过滤列表中的复杂对象,如字典或自定义对象。

例如,假设有一个列表,包含多个字典,每个字典表示一个人的信息:

people = [

    {"name": "Tom", "age": 24},

    {"name": "Lucy", "age": 18},

    {"name": "John", "age": 32},

    {"name": "Amy", "age": 21}

]

要使用filter()函数只保留年龄大于20岁的人,可以这样写:

adults = list(filter(lambda x: x["age"] > 20, people))

print(adults)

将输出:

[{'name': 'Tom', 'age': 24}, {'name': 'John', 'age': 32}, {'name': 'Amy', 'age': 21}]

在这个例子中,使用一个lambda函数检查每个字典中的“年龄”键是否大于20。filter()函数只保留那些年龄大于20岁的人。

总结

filter()函数是一个非常有用的函数,可以让您过滤列表、元组和其他可迭代对象中的元素。它接受一个函数和一个可迭代对象作为参数,并只保留那些由函数返回True的元素。

使用lambda表达式可以使代码更加简洁,同时可以过滤各种类型的对象,如数字、字符串、字典、自定义对象等。