hik*_*ker 4 python arrays list python-3.x
如何在不使用numpy的情况下使用boolean inddex数组过滤列表?
例如:
>>> l = ['a','b','c']
>>> b = [True,False,False]
>>> l[b]
Run Code Online (Sandbox Code Playgroud)
结果应该是:
['a']
Run Code Online (Sandbox Code Playgroud)
我知道numpy支持它,但想知道如何用Python解决.
>>> import numpy as np
>>> l = np.array(['a','b','c'])
>>> b = np.array([True,False,False])
>>> l[b]
array(['a'],
dtype='|S1')
Run Code Online (Sandbox Code Playgroud)
Python不支持布尔索引,但该itertools.compress函数完全符合您的要求.它返回一个迭代器,意味着你需要使用list构造函数来返回一个列表.
>>> from itertools import compress
>>> l = ['a', 'b', 'c']
>>> b = [True, False, False]
>>> list(compress(l, b))
['a']
Run Code Online (Sandbox Code Playgroud)
[a for a, t in zip(l, b) if t]
# => ["a"]
Run Code Online (Sandbox Code Playgroud)
更高效一点,使用迭代器版本:
from itertools import izip
[a for a, t in izip(l, b) if t]
# => ["a"]
Run Code Online (Sandbox Code Playgroud)
编辑:user3100115 的版本更好。