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

用Python的filter()函数来过滤元素

发布时间:2023-05-27 05:56:12

Python语言中的filter()函数是一种高阶函数,它可以用来过滤序列中的元素,并返回一个由满足过滤条件的元素所组成的新的可迭代对象。这个函数可以接受两个参数:一个函数和一个序列。其中, 个参数是一个函数,它用来对序列中的每个元素进行判断,如果这个元素符合条件,就会被加入到返回的新序列里。第二个参数是一个序列,它是需要进行过滤的对象。filter()函数的返回值是一个可迭代的对象,可以使用for循环来遍历这个对象,也可以通过list()函数将其转化为列表。

filter()函数的常见用法是对列表、元组或字典等可迭代对象进行筛选。下面是一个简单的例子,它使用filter()函数来从一个列表中过滤出所有的偶数:

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_lst = list(filter(lambda x: x % 2 == 0, lst))
print(even_lst)  # [2, 4, 6, 8, 10]

在这个例子中,我们通过lambda表达式定义了一个匿名函数来对每个元素进行筛选。这个匿名函数接受一个参数x,用来表示列表中的每个元素。当x%2等于0时,它会返回True,表示这个元素是一个偶数;否则返回False,表示这个元素不是偶数。这个lambda表达式被传递给了filter()函数的 个参数,它用来判断序列中的每个元素是否符合条件。在这个例子中,我们将filter()函数的返回值转化为列表,并将其输出到控制台。输出结果为[2, 4, 6, 8, 10],这些元素都是原先序列中的偶数。

除了使用lambda表达式之外,filter()函数还可以使用普通的函数来进行筛选。下面是一个使用普通函数的例子,这个函数接受一个字符串作为参数,如果字符串中包含字母'b',就返回True,表示这个字符串需要筛选出来,否则返回False,表示这个字符串不需要筛选出来:

def contains_b(s):
    return 'b' in s
lst = ['ab', 'bc', 'cd', 'de', 'ef']
b_lst = list(filter(contains_b, lst))
print(b_lst)  # ['ab', 'bc']

在这个例子中,我们定义了一个名为contains_b的普通函数,它接受一个字符串作为参数,并通过in关键字判断这个字符串是否包含字母'b'。如果包含字母'b',它就会返回True,表示这个字符串需要被筛选出来;反之,它就会返回False,表示这个字符串不需要被筛选出来。这个contains_b函数被传递给了filter()函数的 个参数,用来对序列中的每个元素进行判断。在这个例子中,我们将filter()函数的返回值转化为列表,并将其输出到控制台。输出结果为['ab', 'bc'],这些字符串都是包含字母'b'的。

除了对列表、元组或字典等可迭代对象进行筛选之外,filter()函数还可以用于去除序列中的空白元素。这个功能比较常见,可以通过lambda表达式来实现。下面是一个示例,它使用filter()函数来去除一个列表中的所有空白元素:

lst = ['hello', '', 'world', '', '', 'python']
non_empty_lst = list(filter(lambda x: x != '', lst))
print(non_empty_lst)  # ['hello', 'world', 'python']

在这个例子中,我们通过lambda表达式定义了一个匿名函数来判断元素是否为空字符串。当x不等于空字符串时,这个lambda表达式会返回True,表示这个元素需要被保留;否则它会返回False,表示这个元素需要被过滤掉。这个lambda表达式被传递给了filter()函数的 个参数,用来对序列中的每个元素进行判断。在这个例子中,我们将filter()函数的返回值转化为列表,并将其输出到控制台。输出结果为['hello', 'world', 'python'],这些元素都是不包含空字符串的。

总的来说,使用filter()函数可以非常方便地筛选序列中符合条件的元素。你可以选择使用lambda表达式来进行简单的判断,也可以定义自己的普通函数来进行复杂的判断。无论哪种方式,filter()函数都可以提高你的编码效率,让你的代码更加简洁明了。