Python 根据掩码减少列表

0 投票
1 回答
659 浏览
提问于 2025-04-28 09:07

我想根据我的掩码创建一个更小的列表:比如列表 [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
  1. 你可以使用 itertools.compress,用法如下

    >>> from itertools import compress
    >>> list(compress([1, 2, 3], [1, 0, 1]))
    [1, 3]
    
  2. 另外,你也可以用列表推导式来筛选,像这样

    >>> [item for item, mask in zip([1, 2, 3], [1, 0, 1]) if mask]
    [1, 3]
    
  3. 更简单的是,不用 zip,你可以根据索引跳过某些项,像这样

    >>> data, mask = [1, 2, 3], [1, 0, 1]
    >>> [item for index, item in enumerate(data) if mask[index]]
    [1, 3]
    
  4. 或者你可以用简单的循环和索引,像这样

    >>> [data[index] for index in range(len(data)) if mask[index]]
    [1, 3]
    

撰写回答