Python 根据掩码减少列表
我想根据我的掩码创建一个更小的列表:比如列表 [1, 2, 3]
和掩码 [1, 0, 1]
应该给我 [1, 3]
。
我写了以下这个函数:
def reducing(arr, mask):
out = []
for i in range(len(mask)):
if mask[i]:
out.append(arr[i])
return out
这个函数可以工作,但我觉得可以用更简单的方法,比如用 reduce 函数(毕竟,我是在减少列表 :-))或者用列表推导式。有没有人能帮我一下?
1 个回答
4
你可以使用
itertools.compress
,用法如下>>> from itertools import compress >>> list(compress([1, 2, 3], [1, 0, 1])) [1, 3]
另外,你也可以用列表推导式来筛选,像这样
>>> [item for item, mask in zip([1, 2, 3], [1, 0, 1]) if mask] [1, 3]
更简单的是,不用
zip
,你可以根据索引跳过某些项,像这样>>> data, mask = [1, 2, 3], [1, 0, 1] >>> [item for index, item in enumerate(data) if mask[index]] [1, 3]
或者你可以用简单的循环和索引,像这样
>>> [data[index] for index in range(len(data)) if mask[index]] [1, 3]