Python 中的过滤列表

2024 年 8 月 29 日 | 4 分钟阅读

在使用购物应用时,假设我们要购买一件 T 恤;我们在搜索栏中输入“T 恤”,然后出现数百个结果。我们会考虑一些标准来选择,例如我们想花多少钱买 T 恤、颜色等。因此,购物应用提供了“过滤”选项,使用该选项我们可以只查看已满足我们预定义标准的结果。

同样,在处理大量数据时,我们有时需要根据某些标准来过滤数据。例如,在印度 30 亿人口中,如果我们想要关于某个特定年龄段人群的信息,我们可以根据年龄段过滤这 30 亿人口资料。

本教程将通过示例讨论如何根据程序中的需要过滤存储在列表中的数据。

首先,列表是 Python 中的内置数据结构,我们可以在其中存储不同类型的数据。

示例 1

假设我们有一个包含 60 名学生某科目成绩的列表,我们想过滤掉低于 20 的分数。因此,这里的标准是消除所有低于 20 的值。

代码

输出

[30, 40, 56, 54, 34]

示例 2

假设我们有一个包含一些字符的列表,我们想从列表中过滤出所有辅音。

输出

['a', 'e', 'i', 'o']

在上述两个示例中,我们创建了一个新列表,并将原始列表中满足我们所需标准的元素追加到其中。

另一种方法

我们也可以创建一个原始列表的副本,然后删除不满足标准的元素。

示例

输出

['a', 'e', 'i', 'o']
  • 上面的代码创建了原始字符列表的副本,并在元素不存在于元音列表时删除它们。

Python 的内置函数

这些是一般方法,但 Python 是一种让一切都更简单的语言。它提供了一个名为 filter() 的内置函数,该函数根据我们给出的标准过滤列表。

语法

标准:我们提供给过滤列表的测试标准。该函数检查序列中的每个元素是否在用标准测试时返回 True。

序列:我们提供的数据结构可以是列表、元组、集合或任何其他可迭代数据类型。

  • 该函数返回过滤后的序列。

让我们以我们之前使用的两个示例,看看 filter() 的工作原理:

输出


[30, 40, 56, 54, 34]
  • 在 Python 3.x 中,filter() 返回一个对象。因此,我们需要使用 list() 将对象转换为列表。
  • 在上面的代码中,我们创建了一个 criterion 函数,它检查给定变量是否大于 20。现在,我们可以使用 filter() 结合 criterion 对任何我们想要的数据进行单行处理。

示例

输出

['a', 'e', 'i', 'o']

Lambda 函数 + filter()

每次需要 filter() 时都创建一个函数可能会很麻烦,尤其是如果我们以后不再需要它。因此,我们通常将 lambda 函数与该函数一起使用。

如果您不了解 lambda 函数,这里有一个小提示

lambda 函数是无名函数,即匿名函数。它可以接受任意数量的参数,并允许单个表达式。我们使用 lambda 函数创建了一个只需要很短时间使用且没有太多长期意义的函数。

语法

示例

输出

5

这里是用 lambda 函数简化我们之前使用的两个示例

输出

[30, 40, 56, 54, 34]

输出

['a', 'e', 'i', 'o']

过滤列表的列表

假设我们正在进行一项调查,我们有一个可能的罪犯列表。我们知道嫌疑人的年龄在 20 到 30 岁之间。现在,我们需要过滤这些列表。

输出

[['Roberto', 23], ['Ross', 21], ['Chandler', 23], ['Joey', 27]]