Zeile in Liste finden, die gesuchte Teilzeichenkette enthält

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
wmauss
User
Beiträge: 8
Registriert: Samstag 12. September 2015, 10:40

Hallo zusammen,

programmiere seit gestern in Python. Hier mein Problem:

Ich habe eine Liste, die pro Listeneintrag eine Zeile aus einer Textdatei enthält.
Ich möchte nun in der Liste eine bestimmte Teilzeichenkette suchen und den Listeneintrag, der die Teilzeichenkette enthält, kopieren.

Das wollte ich wie folgt anstellen:
Filtern der Liste mittels

Code: Alles auswählen

filter(funktion, liste)
liste ist die o.g. Liste.
funktion muß nach meiner Recherche eine anonyme Funktion enthalten:

Code: Alles auswählen

lambda Argument1, Argument2: Ausdruck

Argument1 wäre wohl die gesuchte Teilzeichenkette, Argument2 die Liste.

Stellt sich nur noch die Frage welche Funktion ich anwenden könnte.

Code: Alles auswählen

teilzeichenkette in liste
geht nicht, weil so nur komplette listeneinträge verglichen werden.
Habt ihr da eine Idee oder geht das so überhaupt?

Ich habe mich jetzt mit einer Schleife beholfen, die Lösung mit der filter methode erscheint mir aber eleganter:

Code: Alles auswählen

while i <= len(liste):
    try: 
        liste[i].index
        element = liste[i]
        break
    except ValueError: 
        pass
Im Voraus danke für Eure Hilfe!

Grüße
Werner
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Code: Alles auswählen

data = list(...)
filtered = [element for element in data if 'foo' in element]
Mit einer List-Comprehension geht das schöner als mit `filter`. Du kannst auch einen Generatorausdruck draus machen: `(element for element in data if 'foo' in element)`.
the more they change the more they stay the same
BlackJack

@wmauss: Bei `filter()` *muss* man keine anonyme Funktion verwenden, da kann man als erstes Argument *jedes* aufrufbare Objekt übergeben was beim Aufruf *ein* Argument erwartet. Und dieses aufrufbare Objekt wird dann von `filter()` mit jedem einzelnen Element aus seinem zweiten Argument aufgerufen und muss einen Wahrheitswert zurück geben der dann als Entscheidung dient ob das Element im Ergebnis von `filter()` ist oder nicht.
Antworten