Ich habe eine Liste:
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
und möchten nach Elementen suchen, die die Zeichenfolge enthalten 'abc'
. Wie kann ich das machen?
if 'abc' in my_list:
würde prüfen, ob 'abc'
in der Liste vorhanden ist, aber es ist ein Teil von 'abc-123'
und 'abc-456'
, 'abc'
existiert nicht für sich. Wie kann ich also alle Artikel erhalten, die enthalten 'abc'
?
Antworten:
Wenn Sie nur prüfen möchten, ob
abc
eine Zeichenfolge in der Liste vorhanden ist, können Sie es versuchenWenn Sie wirklich alle die Elemente enthält , erhalten möchten
abc
, verwenden Siequelle
if myitem in myarray:
filter(lambda element: 'abc' in element, some_list)
index()
Methode:try: return mylist.index(myitem); except ValueError: pass
Werfen Sie einfach das da draußen: Wenn Sie nach Bedarf geschehen gegen mehr als eine Zeichenkette zu passen, zum Beispiel
abc
unddef
, Sie zwei Comprehensions kombinieren können wie folgt dar :Ausgabe:
quelle
{s for s in my_list for xs in matchers if xs in s}
(beachten Sie die geschweiften Klammern, um ein eindeutiges Set zu erstellen). Könnte leichter zu lesen sein, könnte aber langsamer sein, wenn die meistens
Werte übereinstimmen, da Sieany
beim ersten Spiel effizient anhalten.Verwenden Sie
filter
, um zu den Elementen zu gelangen, die habenabc
.Sie können auch ein Listenverständnis verwenden.
Verwenden Sie das Wort übrigens nicht
list
als Variablennamen, da es bereits für denlist
Typ verwendet wird.quelle
Wenn Sie nur wissen müssen, ob 'abc' in einem der Elemente enthalten ist, ist dies der kürzeste Weg:
quelle
Dies ist eine ziemlich alte Frage, aber ich biete diese Antwort an, da die vorherigen Antworten keine Elemente in der Liste enthalten, 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 mit solchen Elementen in der Liste ordnungsgemäß umzugehen, indem Sie die nicht iterierbaren Elemente überspringen:
dann mit einer solchen Liste:
Sie erhalten weiterhin die passenden Artikel (
['abc-123', 'abc-456']
)Der Test für iterable ist möglicherweise nicht der beste. Habe es von hier bekommen: Wie bestimme ich in Python, ob ein Objekt iterierbar ist?
quelle
[el for el in lst if el and (st in el)]
das gegebene Beispiel nicht sinnvoller?my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
keine Notwendigkeit, es zu komplizieren.quelle
quelle
if 'abc' in item
eher zu verwendenitem.find('abc') == -1
.quelle
Verwenden Sie die
__contains__()
Methode der Pythons-Zeichenfolgenklasse:quelle
Ich bin neu in Python. Ich habe den folgenden Code zum Laufen gebracht und es leicht verständlich gemacht:
quelle
quelle
quelle
import re
mylist=['abc','def','ghi','abcff']
my_list_string=''.join(mylist)
string_to_find="abc"
res=re.findall(string_to_find,my_list_string)
print(res)
Ich habe eine Suche durchgeführt, bei der Sie einen bestimmten Wert eingeben müssen. Dann wird nach einem Wert aus der Liste gesucht, die Ihre Eingabe enthält:
Versuchen Sie, nach 'abc' zu suchen.
quelle
quelle
Ich brauchte die Listenindizes , die einer Übereinstimmung entsprechen, wie folgt:
Ausgabe
quelle
Frage: Geben Sie die Informationen von abc
quelle
Meines Wissens wird eine 'for'-Anweisung immer Zeit in Anspruch nehmen.
Wenn die Listenlänge zunimmt, nimmt auch die Ausführungszeit zu.
Ich denke, dass das Durchsuchen eines Teilstrings in einem String mit der Anweisung 'is' etwas schneller ist.
Ich stimme jedoch zu, dass die
any
Aussage besser lesbar ist.quelle