So überprüfen Sie, ob eine Zeichenfolge eine Teilzeichenfolge von Elementen in einer Liste von Zeichenfolgen ist
Lesezeit: 5 Minuten
SandyBr
Wie suche ich nach Elementen, die die Zeichenfolge enthalten 'abc' in der folgenden Liste?
xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
Das Folgende überprüft, ob 'abc' ist in der Liste, wird aber nicht erkannt 'abc-123' und 'abc-456':
if 'abc' in xs:
Um das Gegenteil zu überprüfen (wenn eine Zeichenfolge eine von mehreren Zeichenfolgen enthält): stackoverflow.com/a/6531704/2436175
– Antonio
18. November 2014 um 10:48 Uhr
Wenn die linken Teile der Einträge eindeutig sind, sollten Sie erwägen, ein Diktat aus der Liste zu erstellen: Suchen Sie einen Eintrag in einer Liste basierend auf einer Teilzeichenfolge
– Georgi
6. Februar 2019 um 10:19 Uhr
Siehe auch diese Antwort von Raymond Hettinger (die eher eine Antwort auf diese Frage sein sollte).
– mkrieger1
11. August 2021 um 9:38 Uhr
Sven Marnach
Um das Vorhandensein von zu überprüfen '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 Artikel zu erhalten, die enthalten 'abc':
matching = [s for s in xs if "abc" in s]
Ich muss überprüfen, ob sich ein Element in einem Array von 6 Elementen befindet. Ist es schneller, 6 “wenn” zu machen, oder ist es dasselbe?
– Olivier Pons
10. März 2013 um 0:11 Uhr
Eine andere Möglichkeit, alle Zeichenfolgen zu erhalten, die die Teilzeichenfolge ‘abc’ enthalten: filter(lambda element: 'abc' in element, some_list)
@midkin: Ich verstehe weder, was genau Sie versucht haben, noch wie es schief gelaufen ist. Sie werden wahrscheinlich mehr Glück haben, wenn Sie eine neue Frage stellen (mit der Schaltfläche “Frage stellen”), Ihren genauen Code kopieren, was Sie von dem Code erwartet haben und was er tatsächlich getan hat. “Hat nicht funktioniert” ist völlig bedeutungslos, wenn Sie nicht definieren, was “funktioniert” in diesem Zusammenhang bedeutet, aber selbst dann ist es besser zu erklären, was tatsächlich passiert ist, als zu sagen, was nicht funktioniert hat.
– Sven Marnach
16. Februar 2015 um 13:11 Uhr
@LarryCai Der Scheck "abc" in some_string wird auf Vorhandensein prüfen "abc" als exakter, zusammenhängender Teilstring von some_stringalso beides "abc" in "cba-4123" und "abc" in "a-b-c" wird zurückkehren False. Keine Änderung des Codes erforderlich.
– Sven Marnach
13. September 2021 um 9:12 Uhr
fantastisch
Werfen Sie das einfach raus: Wenn Sie zum Beispiel zufällig mit mehr als einer Saite übereinstimmen müssen abc und defkö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)]
Ausgabe:
['abc-123', 'def-456', 'abc-456']
Das war genau das, wonach ich gegoogelt hatte. Danke!
– N8TRO
6. Juli 2016 um 21:13 Uhr
Könntest du auch verwenden {s for s in my_list for xs in matchers if xs in s} (Beachten Sie die geschweiften Klammern, um ein einzigartiges Set zu erstellen). Könnte einfacher zu lesen sein, könnte aber langsamer sein, wenn die meisten s Werte werden übereinstimmen, da Ihre any wird effizient beim ersten Spiel aufhören.
– Matthias Fripp
9. Januar 2018 um 18:47 Uhr
ERSTAUNLICH – in einer ähnlichen Situation würde ich pandas str.contains verwenden, aber mit Listen ist das perfekt
– data_runner
20. April um 6:50 Uhr
MAK
Verwenden filter um alle Elemente zu erhalten, die haben 'abc':
Wenn Sie nur wissen müssen, ob ‘abc’ in einem der Elemente enthalten ist, 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 []’, ).
Robert Mül
Dies ist eine ziemlich alte Frage, aber ich biete diese Antwort an, weil die vorherigen Antworten nicht mit Elementen in der Liste fertig werden, die keine Zeichenfolgen (oder eine Art iterierbares Objekt) sind. Solche Elemente würden dazu führen, dass das gesamte Listenverständnis mit einer Ausnahme fehlschlägt.
Verwenden Sie Folgendes, um solche Elemente in der Liste durch Überspringen der nicht iterierbaren Elemente ordnungsgemäß zu behandeln:
[el for el in lst if isinstance(el, collections.Iterable) and (st in el)]
Sie erhalten weiterhin die passenden Artikel (['abc-123', 'abc-456'])
Der Test für iterable ist möglicherweise nicht der beste. Got it from here: Wie stelle ich in Python fest, ob ein Objekt iterierbar ist?
Würde nicht [el for el in lst if el and (st in el)] in dem gegebenen Beispiel mehr Sinn machen?
– Gordo
1. Oktober 2016 um 6:20 Uhr
@tinix Ich weiß nicht, dass nicht iterierbare Objekte elegant behandelt werden, oder?
– Robert Muil
17. Oktober 2016 um 8:31 Uhr
“gegebenes Beispiel” my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] keine Notwendigkeit, es zu verkomplizieren.
– Gordo
17. Oktober 2016 um 20:15 Uhr
Ja, absolut – die akzeptierte Antwort ist perfekt geeignet und mein Vorschlag ist komplizierter, also zögern Sie nicht, ihn zu ignorieren – ich habe nur angeboten, falls jemand das gleiche Problem wie ich hatte: Nicht iterierbare Elemente in solchen Listen sind eine reale Möglichkeit obwohl es im gegebenen Beispiel nicht vorhanden ist.
– Robert Muil
18. Oktober 2016 um 18:28 Uhr
jamylak
x = 'aaa'
L = ['aaa-12', 'bbbaaa', 'cccaa']
res = [y for y in L if x in y]
Würde nicht [el for el in lst if el and (st in el)] in dem gegebenen Beispiel mehr Sinn machen?
– Gordo
1. Oktober 2016 um 6:20 Uhr
@tinix Ich weiß nicht, dass nicht iterierbare Objekte elegant behandelt werden, oder?
– Robert Muil
17. Oktober 2016 um 8:31 Uhr
“gegebenes Beispiel” my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] keine Notwendigkeit, es zu verkomplizieren.
– Gordo
17. Oktober 2016 um 20:15 Uhr
Ja, absolut – die akzeptierte Antwort ist perfekt geeignet und mein Vorschlag ist komplizierter, also zögern Sie nicht, ihn zu ignorieren – ich habe nur angeboten, falls jemand das gleiche Problem wie ich hatte: Nicht iterierbare Elemente in solchen Listen sind eine reale Möglichkeit obwohl es im gegebenen Beispiel nicht vorhanden ist.
– Robert Muil
18. Oktober 2016 um 18:28 Uhr
jamylak
for item in my_list:
if item.find("abc") != -1:
print item
Wenn Sie diesen Ansatz wählen, denke ich, dass es idiomatischer ist if 'abc' in item eher verwenden item.find('abc') == -1.
– Wyatt Baldwin
10. März 2016 um 22:22 Uhr
11382000cookie-checkSo überprüfen Sie, ob eine Zeichenfolge eine Teilzeichenfolge von Elementen in einer Liste von Zeichenfolgen istyes
Um das Gegenteil zu überprüfen (wenn eine Zeichenfolge eine von mehreren Zeichenfolgen enthält): stackoverflow.com/a/6531704/2436175
– Antonio
18. November 2014 um 10:48 Uhr
Wenn die linken Teile der Einträge eindeutig sind, sollten Sie erwägen, ein Diktat aus der Liste zu erstellen: Suchen Sie einen Eintrag in einer Liste basierend auf einer Teilzeichenfolge
– Georgi
6. Februar 2019 um 10:19 Uhr
Siehe auch diese Antwort von Raymond Hettinger (die eher eine Antwort auf diese Frage sein sollte).
– mkrieger1
11. August 2021 um 9:38 Uhr