Obtener elementos de una lista basada en otra lista booleana

Tengo dos listas del mismo tamaño, una es una lista de cadenas y la otra una lista de booleanos ( True , False ) y quiero devolver una lista de cadenas solo si el índice es Verdadero.

 b_list = [True, False, True] s_list = ['abc', 'sfsfsfsf', 'def'] 

querer

 s_list = ['abc','def'] 

Utilice itertools.compress

comprimir (datos, selectores) : devuelve elementos de datos correspondientes a elementos selectores verdaderos

Entonces s_list es data y b_list es selectores :

 In [8]: import itertools In [9]: list(itertools.compress(s_list, b_list)) Out[9]: ['abc', 'def'] 

Sin itertools usando lista de comprensión:

 [y for (x,y) in zip(b_list, s_list) if x]