我想根据我的面具创建一个较小的列表:例如列表[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函数可以更简单(总而言之 - 我正在减少列表:-))或者理解。任何人都可以帮忙吗?
答案 0 :(得分:2)
您可以使用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]