Lista de Comprensiones y Condiciones?

Estoy tratando de ver si puedo mejorar este código utilizando las listas de comprensión.
Digamos que tengo las siguientes listas:

a_list = [ 'HELLO', 'FOO', 'FO1BAR', 'ROOBAR', 'SHOEBAR' ] regex_list = [lambda x: re.search(r'FOO', x, re.IGNORECASE), lambda x: re.search(r'RO', x, re.IGNORECASE)] 

Básicamente, quiero agregar todos los elementos que no tienen ninguna coincidencia en la lista de regex_list en otra lista.

Por ejemplo ==>

 newlist = [] for each in a_list: for regex in regex_list: if(regex(each) == None): newlist.append(each) 

¿Cómo puedo hacer esto usando listas de comprensión? ¿Es incluso posible?

Claro, creo que esto debería hacerlo.

 newlist = [s for s in a_list if not any(r(s) for r in regex_list)] 

EDITAR : en una inspección más cercana, observo que su código de ejemplo en realidad agrega a la nueva lista cada cadena en una a_list que no coincide con todas las expresiones regulares y, lo que es más, agrega cada cadena una vez por cada expresión regular que no coincide. La comprensión de mi lista hace lo que creo que querías decir, que es agregar solo una copia de cada cadena que no coincida con ninguna de las expresiones regulares.

Trabajaría tu código para esto:

 a_list = [ 'HELLO', 'FOO', 'FO1BAR', 'ROOBAR', 'SHOEBAR' ] regex_func = lambda x: not re.search(r'(FOO|RO)', x, re.IGNORECASE) 

Entonces tienes dos opciones:

  1. Filtrar

    newlist = filter(regex_func, a_list)

  2. Listar comprensiones

    newlist = [x for x in a_list if regex_func(x)]