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?
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).