Python mas缩减列表

2024-04-20 12:06:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想基于我的掩码创建一个更小的列表:例如list [1, 2, 3]和mask:[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函数(总而言之,我正在缩减列表:-))或理解它来简化它。有人能帮忙吗?在


Tags: 函数in列表forlenifdefrange
1条回答
网友
1楼 · 发布于 2024-04-20 12:06:10
  1. 您可以使用^{},如下所示

    >>> 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]
    

相关问题 更多 >