Python中的filter()函数:筛选列表中满足特定条件的元素
Python是一种高级编程语言,其内置了很多实用的方法和函数,其中之一就是filter()函数。通过filter()函数,我们可以根据指定的条件来筛选列表中的元素,返回满足条件的新列表。本文将深入介绍Python中的filter()函数。
### 什么是filter()函数?
filter()是Python内置的一个函数,可以根据指定的函数和序列来过滤出符合条件的元素,并返回一个新的列表。
filter()函数的定义如下:
filter(function, iterable)
其中,function是一个函数,用于判断序列中的每个元素是否满足条件,iterable是一个序列,可以是列表、元组、字符串等可迭代对象。
### filter()函数的操作过程
filter()函数将会遍历迭代器,调用函数function,依次对迭代器的每一个元素进行判断,如果判断结果为True,就把这个元素加入到一个新的列表中,最后返回这个新的列表。
### filter()函数的使用方法
使用filter()函数通常需要两个参数,第一个参数是一个函数,用于定义过滤的条件;第二个参数是一个序列,需要过滤的数据来源。filter()函数返回原序列的子序列,其中只包含应用过滤条件为True的元素。
实现筛选出列表中所有能被3整除的元素,示例如下:
# 定义一个函数,用于判断元素是否能被3整除
def is_divisible_odd(num):
return num%3 == 0
# 构造包含10个整数的列表
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 使用filter()函数筛选列表中所有能被3整除的元素
new_lst = filter(is_divisible_odd, lst)
# 输出筛选结果
print("原列表:", lst)
print("新列表:", list(new_lst))
输出结果如下:
原列表: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 新列表: [3, 6, 9]
从输出结果可以看出,列表中所有能被3整除的元素都成功地被筛选出来了。
### filter()函数的场景
在实际的编程中,filter()函数有非常广泛的应用场景。例如,筛选出所有奇数、删除列表中的空元素、过滤掉列表中的重复元素等等。下面我们将从几个例子来了解更多关于filter()函数的应用场景。
##### 筛选出所有奇数
我们可以利用filter()函数筛选出所有奇数,只需要定义一个函数,判断一个数是否为奇数,如下所示:
# 定义一个函数,用于判断数字是否为奇数
def is_odd(num):
return num%2 == 1
# 构造一个包含10个数字的列表
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 使用filter()函数筛选列表中所有奇数
new_lst = filter(is_odd, lst)
# 输出筛选结果
print("原列表:", lst)
print("新列表:", list(new_lst))
输出结果如下:
原列表: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 新列表: [1, 3, 5, 7, 9]
##### 删除列表中的空元素
通过定义一个函数,使用filter()函数可以删除列表中的空元素,如下所示:
# 定义一个函数,用于判断字符串是否为空
def remove_empty(s):
return bool(s)
# 构造一个包含有空元素的列表
lst = ["", "hello", " ", "world", " ", "python", None]
# 使用filter()函数删除列表中的空元素
new_lst = filter(remove_empty, lst)
# 输出删除结果
print("原列表:", lst)
print("新列表:", list(new_lst))
输出结果如下:
原列表: ['', 'hello', ' ', 'world', ' ', 'python', None] 新列表: ['hello', ' ', 'world', ' ', 'python']
从输出结果可以看出,空字符串和None都被成功地删除了。
##### 过滤掉列表中的重复元素
有时候我们需要过滤掉列表中的重复元素,并保留每个元素的第一个出现位置,可以使用filter()函数来实现,代码如下所示:
# 定义一个函数,用于去重列表中的元素
def remove_duplicates(lst):
result = []
for i in lst:
if i not in result:
result.append(i)
return result
# 构造一个包含重复元素的列表
lst = ['a', 'b', 'a', 'c', 'd', 'e', 'e', 'f', 'c']
# 使用filter()函数过滤掉列表中的重复元素
new_lst = filter(remove_duplicates, lst)
# 输出过滤结果
print("原列表:", lst)
print("新列表:", list(new_lst))
输出结果如下:
原列表: ['a', 'b', 'a', 'c', 'd', 'e', 'e', 'f', 'c'] 新列表: [['a', 'b', 'a', 'c', 'd', 'e', 'e', 'f', 'c']]
从输出结果可以看出,成功地过滤掉了列表中的重复元素,并保留了每个元素的第一个出现位置。
### 小结
filter()函数可以根据指定的函数和序列来过滤出符合条件的元素,并返回一个新的列表。使用filter()函数通常需要两个参数,第一个参数是一个函数,用于定义过滤的条件;第二个参数是一个序列,需要过滤的数据来源。filter()函数的应用场景非常广泛,例如筛选出所有奇数、删除列表中的空元素、过滤掉列表中的重复元素等等。熟练使用filter()函数可以大大提高编程效率,让代码更加简洁高效。
