MEMOO
MEMOO
Published on 2025-04-18 / 5 Visits
0
0

使用filter()函数过滤列表元素

摘要:在本节中,您将学习如何使用 Python 内置的 filter() 函数来过滤列表元素。

Python filter() 函数简介

有时,您需要 遍历列表 中的元素,并根据指定的条件选择其中的一些元素。

假设您有以下分数列表:

scores = [70, 60, 80, 90, 50]

要获取 scores 列表中所有大于或等于 70 的元素,您可以使用以下代码:

scores = [70, 60, 80, 90, 50]

filtered = []

for score in scores:

    if score >= 70:

        filtered.append(score)

print(filtered)

输出:

[70, 80, 90]

工作原理:

  • 首先,定义一个空列表filtered),用于存储来自 scores 列表的元素。

  • 其次,遍历 scores 列表中的元素。如果元素大于或等于 70,则将其添加到 filtered 列表中。

  • 最后,将 filtered 列表显示在屏幕上。

Python 有一个内置函数叫做 filter(),它允许您以更优雅的方式过滤列表(或元组)。

以下是 filter() 函数的语法:

filter(fn, list)

filter() 函数遍历列表中的元素,并对每个元素应用 fn() 函数。它返回一个迭代器,其中包含 fn() 返回 True 的元素。

实际上,您可以将任何可迭代对象传递给 filter() 函数的第二个参数,而不仅仅是列表。

以下是如何使用 filter() 函数返回一个分数列表,其中每个分数都大于或等于 70:

scores = [70, 60, 80, 90, 50]

filtered = filter(lambda score: score >= 70, scores)

print(list(filtered))

输出:

[70, 80, 90]

由于 filter() 函数返回一个迭代器,因此您可以使用 for 循环对其进行迭代。或者,您可以使用 list() 函数将迭代器转换为列表。

filter() 函数过滤元组列表

假设您有以下元组列表:

countries = [

    ['China', 1394015977],

    ['United States', 329877505],

    ['India', 1326093247],

    ['Indonesia', 267026366],

    ['Bangladesh', 162650853],

    ['Pakistan', 233500636],

    ['Nigeria', 214028302],

    ['Brazil', 21171597],

    ['Russia', 141722205],

    ['Mexico', 128649565]

]

列表中的每个元素都是一个元组,包含国家名称和人口。

要获取人口超过 3 亿的所有国家,可以使用 filter() 函数,如下所示:

countries = [

    ['China', 1394015977],

    ['United States', 329877505],

    ['India', 1326093247],

    ['Indonesia', 267026366],

    ['Bangladesh', 162650853],

    ['Pakistan', 233500636],

    ['Nigeria', 214028302],

    ['Brazil', 21171597],

    ['Russia', 141722205],

    ['Mexico', 128649565]

]

populated = filter(lambda c: c[1] > 300000000, countries)

print(list(populated))

输出:

[['China', 1394015977], ['India', 1326093247], ['United States', 329877505]]

总结

  • 使用 Python 的 filter() 函数来过滤一个列表(或元组)。


Comment