Python中如何使用 filter() 函数过滤列表中的项?
Python的filter()函数是内置函数之一,它是一个高阶函数,可以对列表中的项进行筛选,然后只保留符合条件的项。一般来说,它需要两个参数,一个是筛选函数,另一个是可迭代对象,通常为一个列表。筛选函数可以是内置的也可以是自定义的,只要返回值为True或False即可。当迭代生成的元素作为筛选函数的参数时,如果其返回值为True,则该元素将被保留,否则将被过滤掉。
语法如下:
filter(function, iterable)
其中:
- function:筛选函数,用于对可迭代对象中的元素进行筛选。
- iterable:可迭代对象,需要被筛选的序列。
返回的结果为一个迭代器对象,其中只包含筛选函数为True的元素。
下面是filter()函数的使用示例:
1. 使用内置函数filter()将列表中的偶数保留下来
numbers = [2, 3, 5, 6, 7, 9, 10, 12]
def is_even(n):
return n % 2 == 0
result = filter(is_even, numbers)
print(list(result)) # [2, 6, 10, 12]
在上面的示例中,我们定义了一个is_even()函数,用于判断一个数字是否为偶数。然后使用filter()函数将numbers列表中的偶数元素保留下来,并将结果转换成列表。
2. 使用filter()函数将列表中的空字符串过滤掉
words = ['', 'hello', 'world', '', 'python', '']
def is_not_empty(s):
return s != ''
result = filter(is_not_empty, words)
print(list(result)) # ['hello', 'world', 'python']
在上面的示例中,我们定义了一个is_not_empty()函数,用于判断一个字符串是否为空字符串。然后使用filter()函数将words列表中的非空元素保留下来,并将结果转换成列表。
3. 自己编写筛选函数实现过滤操作
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] result = filter(lambda x: x % 3 == 0, numbers) print(list(result)) # [3, 6, 9]
在上面的示例中,我们使用lambda表达式定义了一个筛选函数,用于判断一个数字是否能够被3整除。然后使用filter()函数将numbers列表中符合条件的元素保留下来,并将结果转换成列表。
4. 使用filter()函数处理文件读取的内容
def get_file_lines(filename):
with open(filename, 'r', encoding='utf-8') as f:
return f.readlines()
lines = get_file_lines('test.txt')
result = filter(lambda x: 'python' in x, lines)
print(list(result))
在上面的示例中,我们首先编写了一个函数get_file_lines(),用于读取文件内容。然后使用filter()函数将文件中包含'python'的行筛选出来,并将结果转换成列表。
总而言之,filter()函数可以极大减少代码的长度和复杂度,让我们可以更加专注于程序业务逻辑的实现,而不用过多地考虑怎样筛选数据。学会了filter()函数的使用技巧,可以让我们的Python编程变得更加简洁和高效。
