Python 用compress()过滤

  • Post category:Python

当我们需要对一个 iterable 对象进行过滤时,比如去除一些无用的元素或者选择符合某些条件的元素,Python 的 compress() 函数就可以派上用场了。

compress() 函数的语法

compress() 函数的语法如下:

compress(data, selectors)

其中:

  • data:要进行过滤的 iterable 对象;
  • selectors:筛选器,与 data 中的元素一一对应,表示是否筛选该元素。如果筛选器中对应元素的值为真,那么才会返回 data 对应位置上的值。

compress() 函数的示例

以下是两个示例,展示了 compress() 函数的使用方法:

示例一:过滤数组

下面的示例中,我们定义了一个列表 letters,其中包含了从 A 到 Z 的所有字母。然后我们定义了一个筛选器 bools,其中随机添加了一些 TrueFalse。我们调用 compress() 函数,将 lettersbools 作为参数传入。compress() 会根据 bools 中的值,过滤掉对应 letters 中的元素。

from itertools import compress

# 定义 letters 列表和 bools 列表
letters = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
bools = [True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False]

# 调用 compress() 函数
filtered_letters = list(compress(letters, bools))

# 输出过滤后的结果
print(filtered_letters)  # ['A', 'C', 'E', 'G', 'I', 'K', 'M', 'O', 'Q', 'S', 'U', 'W', 'Y']

在上述代码中,我们首先使用 itertools 模块导入了 compress() 函数。然后定义了 lettersbools 两个列表。接着,我们将它们传入了 compress() 函数,并将结果保存在 filtered_letters 变量中。最后,我们打印出了过滤后的结果。

示例二:过滤字典

下面的示例中,我们定义了一个字典 data,其中包含了一些人名和他们的分数。然后我们定义了一个筛选器 selectors,表示分数是否大于 60 分。我们调用 compress() 函数,将 data.values()selectors 作为参数传入。compress() 会根据 selectors 中的值,过滤掉对应 data.values() 中的元素。最终,我们得到了大于 60 分的所有分数。

from itertools import compress

# 定义 data 字典和 selectors 列表
data = {"Tom": 90, "Amy": 80, "Mike": 70, "Jack": 60, "Lily": 50}
selectors = [score > 60 for score in data.values()]

# 调用 compress() 函数
filtered_scores = list(compress(data.values(), selectors))

# 输出过滤后的结果
print(filtered_scores)  # [90, 80, 70]

在上述代码中,我们首先使用 itertools 模块导入了 compress() 函数。然后定义了 dataselectors 两个对象。接着,我们使用列表推导式生成了 selectors 列表。最后,我们将 data.values()selectors 传入了 compress() 函数,并将结果保存在 filtered_scores 变量中。最后,我们打印出了经过过滤后的结果。

以上就是 compress() 函数的使用方法和示例,可以根据实际需要灵活运用。