目 录CONTENT

文章目录

Python-内置函数filter

~梓
2025-03-10 / 0 评论 / 0 点赞 / 19 阅读 / 0 字
温馨提示:
本文最后更新于2025-03-10,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

filter() 是一个内置函数,用于过滤可迭代对象(如列表、元组、字符串等)中的元素,根据指定的函数对每个元素进行判断,将满足条件的元素筛选出来,最终返回一个迭代器。

基本语法

filter(function, iterable)

参数详解

  1. function 参数
    • 接受一个参数(来自 iterable),返回布尔值。
    • 若返回 True,保留该元素;否则过滤掉。
    • 如果 functionNone,直接保留 iterable 中布尔值为 True 的元素。
  2. iterable 参数
    • 可以是任何可迭代对象(列表、元组、字符串、生成器等)。

返回值

filter() 函数返回一个迭代器,该迭代器包含了 iterable 中所有使 function 返回 True 的元素。

使用示例

过滤列表中的偶数

# 定义一个判断偶数的函数
def is_even(num):
    return num % 2 == 0

# 定义一个列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 使用 filter 函数过滤偶数
even_numbers = filter(is_even, numbers)

# 将迭代器转换为列表
result = list(even_numbers)
print(result)  # 输出: [2, 4, 6, 8, 10]

在上述示例中,定义了一个 is_even 函数用于判断一个数是否为偶数,然后使用 filter() 函数将列表 numbers 中的偶数筛选出来,最后将迭代器转换为列表输出。

使用 lambda 函数过滤字符串中的元音字母

# 定义一个字符串
string = "hello world"

# 使用 lambda 函数过滤元音字母
vowels = 'aeiou'
filtered_chars = filter(lambda char: char.lower() in vowels, string)

# 将迭代器转换为字符串
result = ''.join(filtered_chars)
print(result)  # 输出: 'eo o'

这里使用了 lambda 匿名函数来判断字符是否为元音字母,然后使用 filter() 函数将字符串 string 中的元音字母筛选出来,最后将迭代器转换为字符串输出。

过滤空字符串

# 定义一个包含空字符串的列表
strings = ["apple", "", "banana", "  ", "cherry"]

# 使用 filter 函数过滤空字符串
non_empty_strings = filter(lambda s: s.strip(), strings)

# 将迭代器转换为列表
result = list(non_empty_strings)
print(result)  # 输出: ['apple', 'banana', 'cherry']

在这个示例中,使用 lambda 函数和 strip() 方法判断字符串是否为空或只包含空白字符,然后使用 filter() 函数将非空字符串筛选出来。

当 function 为 None 时

# 定义一个包含不同类型元素的列表
mixed_list = [0, 1, False, True, '', 'hello', [], [1, 2]]

# 使用 filter 函数,function 为 None
filtered_list = filter(None, mixed_list)

# 将迭代器转换为列表
result = list(filtered_list)
print(result)  # 输出: [1, True, 'hello', [1, 2]]

functionNone 时,filter() 函数会返回 iterable 中所有布尔值为 True 的元素。

自定义过滤函数

def is_positive(n):
    return n > 0

numbers = [-3, -2, 0, 5, 10]
filtered = filter(is_positive, numbers)
print(list(filtered))  # 输出: [5, 10]

过滤非字母数字字符(str.isalnum

text = "Hello, 世界! 123#"
# 过滤掉非字母、数字的字符(保留字母、数字、汉字等)
filtered = filter(str.isalnum, text)
clean_text = ''.join(filtered)
print(clean_text)  # 输出: Hello世界123

仅保留字母(str.isalpha

text = "Python3.9 はパワフルです!"
filtered = filter(str.isalpha, text)
letters = ''.join(filtered)
print(letters)  # 输出: Pythonはパワフルです

过滤非数字字符(str.isdigit

data = ["A1", "23", "45kg", "100"]
# 仅保留全数字字符串
filtered = filter(lambda s: s.isdigit(), data)
print(list(filtered))  # 输出: ['23', '100']

注意事项

  • 返回的是迭代器filter() 函数返回的是一个迭代器,而不是一个列表或其他具体的数据结构。如果需要多次使用过滤后的结果,或者想要查看具体的元素,需要将迭代器转换为列表、元组等数据结构。
  • 函数的返回值必须是布尔值function 函数的返回值必须是布尔值,用于指示元素是否满足过滤条件。
  • 原可迭代对象不会被修改filter() 函数不会修改原可迭代对象,只是根据条件筛选出部分元素。
0

评论区