如何使用其他列表屏蔽列表

NBC*_*NBC 1 python

我有一个这样的列表:

x = [True False True False]
Run Code Online (Sandbox Code Playgroud)

和这样的列表:

y = [a b c d]
Run Code Online (Sandbox Code Playgroud)

我想掩盖x在y上得到这个输出:

output = [a c]
Run Code Online (Sandbox Code Playgroud)

我知道如何使用while/for循环来做这件事,但理想情况下使用列表理解来寻找优雅的单行代码.

sac*_*cuL 7

我认为最简单的方法是使用numpy

import numpy as np
>>> x = [True, False, True, False]
>>> y = ['a', 'b', 'c', 'd']
>>> np.array(y)[x]
array(['a', 'c'], dtype='<U1')
Run Code Online (Sandbox Code Playgroud)

如果没有numpy,您还可以在列表理解中枚举:

>>> [i for idx, i in enumerate(y) if x[idx]]
['a', 'c']
Run Code Online (Sandbox Code Playgroud)


ggo*_*len 6

您可以使用zip和列表推导y基于相应的真值来执行过滤操作x:

x = [True, False, True, False]
y = ["a", "b", "c", "d"]

print([b for a, b in zip(x, y) if a])
Run Code Online (Sandbox Code Playgroud)

输出:

['a', 'c']
Run Code Online (Sandbox Code Playgroud)

试试吧!