摘要:在本节中,您将学习如何使用 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()
函数来过滤一个列表(或元组)。