当我们需要对一个 iterable 对象进行过滤时,比如去除一些无用的元素或者选择符合某些条件的元素,Python 的 compress()
函数就可以派上用场了。
compress()
函数的语法
compress()
函数的语法如下:
compress(data, selectors)
其中:
data
:要进行过滤的 iterable 对象;selectors
:筛选器,与data
中的元素一一对应,表示是否筛选该元素。如果筛选器中对应元素的值为真,那么才会返回data
对应位置上的值。
compress()
函数的示例
以下是两个示例,展示了 compress()
函数的使用方法:
示例一:过滤数组
下面的示例中,我们定义了一个列表 letters
,其中包含了从 A 到 Z 的所有字母。然后我们定义了一个筛选器 bools
,其中随机添加了一些 True
和 False
。我们调用 compress()
函数,将 letters
和 bools
作为参数传入。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()
函数。然后定义了 letters
和 bools
两个列表。接着,我们将它们传入了 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()
函数。然后定义了 data
和 selectors
两个对象。接着,我们使用列表推导式生成了 selectors
列表。最后,我们将 data.values()
和 selectors
传入了 compress()
函数,并将结果保存在 filtered_scores
变量中。最后,我们打印出了经过过滤后的结果。
以上就是 compress()
函数的使用方法和示例,可以根据实际需要灵活运用。