hi zusammen,
gibt es in python einen platzhalter für listenelemente?
mein problem sieht ungefähr so aus:
if (platzhalter,"Florian") in [("bla","Florian")]:
print "ja ist in Liste"
Wäre sehr dankbar für ne Antwort. Bin schon ne halbe Std. am Suchen und find nix.
Gruß, Florian
platzhalter bei listen
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Florian,
meinst Du mit Platzhalter sowas wie ".*" bei Regex?
Das könnte man so machen:
mal das Ganze auseinanderdröseln.
[res for res in liste if None not in [re.match(x,y) for x,y in zip(muster, res)]] sind zwei verschachtelte "List Comprehensions" (vielleicht kann das mal einer Übersetzen, jedenfalls kann man damit aus einer Liste eine neue Liste erzeugen). Schaun wir uns mal die Innere "List Cmpherension" an.
[re.match(x,y) for x,y in zip(muster, res)] mit zip(...) werden Elemente aus zwei oder Mehreren Listen oder Tuples zusammengeführt. Aus (".*", "Florian") und ("bla", "Florian") wird [('.*', 'bla'), ('Florian', 'Florian')]. So jetzt können wir diese neue Liste einfach durchlaufen und von den Elementen (Zweiertuples ('.*', 'bla') und ('Florian', 'Florian')) das erste Tupleelement als Muster und das Zweite als zu vergleichenden String mittels re-Modul vergleichen. Als Ergebnis bekommen wir eine Liste die aus Matchobjekten, falls ein Suchpaar übereinstimmt, bzw. bei Nichtübereinstimmung aus None besteht. Wenn also kein None in der neuen Liste vorkommt, dann passt das Muster zu dem Tuple.
Die äussere "List Comprehension" durchläuft nun die ganze Liste und gibt nur die Elemente zurück welche den Test mit dem Muster bestehen. Wenn die resultierende Liste nicht Leer ist, so wurde mindestens ein Passender Eintrag gefunden.
Gruß
Dookie
meinst Du mit Platzhalter sowas wie ".*" bei Regex?
Das könnte man so machen:
Code: Alles auswählen
import re
muster = (".*", "Florian")
liste = [("bla", "Florian"), ("alb", "Max"), ("xyz", "Florian")]
if [res for res in liste if None not in [re.match(x,y) for x,y in zip(muster, res)]]:
print "ja ist in Liste"
[res for res in liste if None not in [re.match(x,y) for x,y in zip(muster, res)]] sind zwei verschachtelte "List Comprehensions" (vielleicht kann das mal einer Übersetzen, jedenfalls kann man damit aus einer Liste eine neue Liste erzeugen). Schaun wir uns mal die Innere "List Cmpherension" an.
[re.match(x,y) for x,y in zip(muster, res)] mit zip(...) werden Elemente aus zwei oder Mehreren Listen oder Tuples zusammengeführt. Aus (".*", "Florian") und ("bla", "Florian") wird [('.*', 'bla'), ('Florian', 'Florian')]. So jetzt können wir diese neue Liste einfach durchlaufen und von den Elementen (Zweiertuples ('.*', 'bla') und ('Florian', 'Florian')) das erste Tupleelement als Muster und das Zweite als zu vergleichenden String mittels re-Modul vergleichen. Als Ergebnis bekommen wir eine Liste die aus Matchobjekten, falls ein Suchpaar übereinstimmt, bzw. bei Nichtübereinstimmung aus None besteht. Wenn also kein None in der neuen Liste vorkommt, dann passt das Muster zu dem Tuple.
Die äussere "List Comprehension" durchläuft nun die ganze Liste und gibt nur die Elemente zurück welche den Test mit dem Muster bestehen. Wenn die resultierende Liste nicht Leer ist, so wurde mindestens ein Passender Eintrag gefunden.
Gruß
Dookie