我有一个值列表,需要根据布尔值列表中的值进行过滤:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
我使用以下行生成一个新的过滤列表:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
结果是:
print filtered_list
[1,4]
这条线工作正常,但是(对我而言)看起来有些过分了,我想知道是否有更简单的方法来实现这一目标。
忠告
以下答案提供了两个好的建议:
1-不要filter
像我一样命名列表,因为它是内置函数。
2-不要比较True
像我做的事情,if filter[idx]==True..
因为这是不必要的。只需使用if filter[idx]
就足够了。
3
仅供参考,这是一个称为流压缩的通用并行计算原语。(之所以称其为“原始”不是因为它很简单,而是因为它被用作许多其他并行算法的
—
构件
有些款式注意事项:
—
Bakuriu
if filter[indx] == True
千万不能使用==
,如果你想检查与身份True
,使用is
。无论如何,在这种情况下,整个比较都没有用,您可以简单地使用if filter[indx]
。最后:永远不要将内置名称用作变量/模块名称(我指的是name filter
)。使用类似的东西included
,这样可以if
很好地读取(if included[indx]
)。