2015-06-15 37 views
1

如何使用布爾型INDEX數組來過濾不使用numpy的列表?使用布爾型索引數組篩選器列表

例如:

>>> l = ['a','b','c'] 
>>> b = [True,False,False] 
>>> l[b] 

結果應該是:

['a'] 

我知道numpy的支持,但想知道如何在Python解決。

>>> import numpy as np 
>>> l = np.array(['a','b','c']) 
>>> b = np.array([True,False,False]) 
>>> l[b] 
array(['a'], 
     dtype='|S1') 

回答

5

Python不支持布爾索引,但itertools.compress函數完全符合您的要求。它返回一個迭代器,表示您需要使用list構造函數返回一個列表。

>>> from itertools import compress 
>>> l = ['a', 'b', 'c'] 
>>> b = [True, False, False] 
>>> list(compress(l, b)) 
['a'] 
2
[a for a, t in zip(l, b) if t] 
# => ["a"] 

有點更高效,使用iterator版本:

from itertools import izip 
[a for a, t in izip(l, b) if t] 
# => ["a"] 

編輯:user3100115的版本更好。