Listenkomprehension Bedingungen?
-
05-07-2019 - |
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?
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:
-
Filter
newlist = filter(regex_func, a_list)
-
Liste Comprehensions
newlist = [x for x in a_list if regex_func(x)]