Python通过掩码减少列表

时间:2014-10-19 08:46:12

标签: python list

我想根据我的面具创建一个较小的列表:例如列表[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 个答案:

答案 0 :(得分:2)

  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]