883 Stimmen

Wie kann man prüfen, ob eine Zeichenfolge eine Teilzeichenkette von Elementen in einer Liste von Zeichenfolgen ist?

Wie kann ich nach Artikeln suchen, die die Zeichenfolge 'abc' in der folgenden Liste?

xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']

Im Folgenden wird geprüft, ob 'abc' in der Liste steht, aber nicht erkannt wird 'abc-123' et 'abc-456' :

if 'abc' in xs:

28 Stimmen

Um das Gegenteil zu prüfen (ob eine Zeichenkette eine von mehreren Zeichenketten enthält): stackoverflow.com/a/6531704/2436175

0 Stimmen

Wenn die linken Teile der Einträge eindeutig sind, sollten Sie erwägen, ein Dict aus der Liste zu erstellen: Suche nach einem Eintrag in einer Liste anhand einer Teilzeichenkette

0 Stimmen

Siehe auch diese Antwort von Raymond Hettinger (der eigentlich eine Antwort auf diese Frage sein sollte).

1380voto

Sven Marnach Punkte 525472

Zur Überprüfung auf das Vorhandensein von 'abc' in einer beliebigen Zeichenfolge in der Liste:

xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']

if any("abc" in s for s in xs):
    ...

Um alle Einträge zu erhalten, die 'abc' :

matching = [s for s in xs if "abc" in s]

238voto

fantabolous Punkte 18632

Nur mal so am Rande: Wenn Sie zufällig mit mehr als einer Zeichenkette übereinstimmen müssen, zum Beispiel abc y def können Sie zwei Verständnisse wie folgt kombinieren:

matchers = ['abc','def']
matching = [s for s in my_list if any(xs in s for xs in matchers)]

Salida:

['abc-123', 'def-456', 'abc-456']

107voto

MAK Punkte 25200

Utilisez filter um alle Elemente zu erhalten, die den 'abc' :

>>> xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
>>> list(filter(lambda x: 'abc' in x, xs))
['abc-123', 'abc-456']

Man kann auch ein Listenverständnis verwenden:

>>> [x for x in xs if 'abc' in x]

104voto

RogerS Punkte 1142

Wenn Sie nur wissen wollen, ob 'abc' in einem der Einträge vorkommt, ist dies der kürzeste Weg:

if 'abc' in str(my_list):

Hinweis: Dies setzt voraus, dass "abc" ein alphanumerischer Text ist. Verwenden Sie es nicht, wenn "abc" nur ein Sonderzeichen sein könnte (z. B. []', ).

20voto

Robert Muil Punkte 2750

Dies ist eine ziemlich alte Frage, aber ich biete diese Antwort, weil die vorherigen Antworten nicht mit Elementen in der Liste, die nicht Strings (oder eine Art von iterable Objekt) sind zu bewältigen. Solche Elemente würden dazu führen, dass das gesamte Listenverständnis mit einer Ausnahme fehlschlägt.

Um mit solchen Elementen in der Liste elegant umzugehen, indem die nicht aufzählbaren Elemente übersprungen werden, verwenden Sie das Folgende:

[el for el in lst if isinstance(el, collections.Iterable) and (st in el)]

dann mit einer solchen Liste:

lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123]
st = 'abc'

erhalten Sie trotzdem die passenden Artikel ( ['abc-123', 'abc-456'] )

Der Test für iterable ist vielleicht nicht der beste. Habe es von hier: Wie kann ich in Python feststellen, ob ein Objekt iterierbar ist?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X