如何使用boolean inddex数组过滤列表而不使用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')
答案 0 :(得分:6)
Python不支持布尔索引,但itertools.compress
函数完全符合您的要求。它返回一个迭代器,意味着你需要使用list
构造函数来返回一个列表。
>>> from itertools import compress
>>> l = ['a', 'b', 'c']
>>> b = [True, False, False]
>>> list(compress(l, b))
['a']
答案 1 :(得分:2)
[a for a, t in zip(l, b) if t]
# => ["a"]
更有效率,使用迭代器版本:
from itertools import izip
[a for a, t in izip(l, b) if t]
# => ["a"]
编辑:user3100115的版本更好。
答案 2 :(得分:1)
使用 enumerate
l = ['a','b','c']
b = [True,False,False]
res = [item for i, item in enumerate(l) if b[i]]
print(res)
给予
['a']