platzhalter bei listen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
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
Dookie
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:

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
Antworten