Seite 1 von 1

platzhalter bei listen

Verfasst: Samstag 19. Juni 2004, 16:00
von florian R.
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

Verfasst: Samstag 19. Juni 2004, 17:43
von Dookie
Hi Florian,

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"
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