Список понятий и условий?

Я пытаюсь проверить, могу ли я сделать этот код лучше, используя списки.
Допустим, у меня есть следующие списки:

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)] 

В основном я хочу добавить все элементы, которые не имеют совпадений в regex_list в другой список.

Например: ==>

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

Как это сделать, используя списки? Возможно ли это?

Конечно, я думаю, это должно сделать это

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

EDIT : при ближайшем рассмотрении я замечаю, что ваш примерный код фактически добавляет в новый список каждую строку в a_list , который не соответствует всем регулярным выражениям – и, более того, он добавляет каждую строку один раз для каждого регулярного выражения, которое не соответствует. Мое понимание списка делает то, что, я думаю, вы имели в виду, добавляя только одну копию каждой строки, которая не соответствует ни одному из регулярных выражений.

Я бы обработал ваш код до этого:

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

Тогда у вас есть два варианта:

  1. Фильтр

    newlist = filter(regex_func, a_list)

  2. Перечисление списков

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