Kit*_*Kit 8 python tuples list bitmask sequence
我从以下列表s和位掩码开始b:
s = ['baa', 'baa', 'black', 'sheep', 'have', 'you', 'any', 'wool']
b = [1, 0, 0, 0, 1, 1, 1, 0] # or any iterable with boolean values
Run Code Online (Sandbox Code Playgroud)
如何编写一些函数apply_bitmask(s, b)以便返回
['baa', 'have', 'you', 'any']
Run Code Online (Sandbox Code Playgroud)
小智 18
Python 3.1 itertools.compress(如果你还没有升级,则是Python 2.7)就是这样做的(列表理解是一个非常接近的第二个):
import itertools
filtered = itertools.compress(s, b)
Run Code Online (Sandbox Code Playgroud)
请注意,这会生成迭代器,而不是列表.保存内存,但如果需要多次迭代或使用索引,则可以随时使用list(itertools.compress(s, b)).还是更短.
S.L*_*ott 10
[ item for item, flag in zip( s, b ) if flag == 1 ]
Run Code Online (Sandbox Code Playgroud)
您可以使用列表推导:
newList = [word for (word, mask) in zip(s,b) if mask]
# Note: Could also use 'if mask == blah', if mask is not a boolean-compatible type.
Run Code Online (Sandbox Code Playgroud)
这首先是原始的两个列表,然后将它们拉到一起,这样你就可以得到一个(临时的 - 这仍然在列表中!)一对单词和它们的掩码列表 - 就像这样[('baa',1), ('baa',0),...].然后只有掩码为1(if mask == 1)的单词被添加到newList.