2014-10-19 103 views
0

我想基於我的掩碼創建一個較小的列表:例如列表[1, 2, 3]和掩碼:[1, 0, 1]應該給我[1, 3]Python按列表縮小列表

我有寫了下面的功能:

def reducing(arr, mask): 
    out = [] 
    for i in range(len(mask)): 
     if mask[i]: 
      out.append(arr[i]) 
    return out 

其中一期工程,但我認爲這是可以做到用減少功能簡單(所有的一切 - 我該列表縮減:-))或理解。有人能幫忙嗎?

回答

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]