Frage

Ich versuche, zu sehen, ob ich diesen Code machen kann besser Listenkomprehensionen verwenden.
Lassen Sie uns sagen, dass ich die folgenden Listen haben:

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

Ich möchte im Grunde alle Elemente hinzuzufügen, die in eine andere Liste keine Spiele in der regex_list haben.

z. ==>

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

Wie kann ich tun, um diese mit Listenkomprehensionen? Ist es überhaupt möglich?

War es hilfreich?

Lösung

Klar, ich denke, das sollte es tun

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

EDIT : bei genauerem Hinsehen, merke ich, dass Ihr Beispielcode fügt tatsächlich auf die neue Liste jede Saite in a_list, die nicht passen alle die regulären Ausdrücke - und was mehr, fügt er jede Saite einmal für jeden regulären Ausdruck, dass es nicht übereinstimmt. Meine Liste Verständnis tut, was ich glaube, du gemeint, die nur eine Kopie jeder Zeichenfolge hinzufügen, die nicht übereinstimmt jeder die regulären Ausdrücke.

Andere Tipps

Ich würde Ihren Code arbeitet unten zu diesem:

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

Dann haben Sie zwei Möglichkeiten:

  1. Filter

    newlist = filter(regex_func, a_list)

  2. Liste Comprehensions

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top