Was Ihre erste Frage betrifft: Dieser Code ist vollkommen in Ordnung und sollte funktionieren, wenn er item
einem der darin enthaltenen Elemente entspricht myList
. Vielleicht versuchen Sie, eine Zeichenfolge zu finden, die nicht genau mit einem der Elemente übereinstimmt, oder Sie verwenden einen Gleitkommawert, der unter Ungenauigkeit leidet.
Was Ihre zweite Frage betrifft: Es gibt tatsächlich mehrere Möglichkeiten, Dinge in Listen zu "finden".
Überprüfen, ob etwas drin ist
Dies ist der Anwendungsfall, den Sie beschreiben: Überprüfen, ob sich etwas in einer Liste befindet oder nicht. Wie Sie wissen, können Sie den in
Operator dafür verwenden:
3 in [1, 2, 3] # => True
Eine Sammlung filtern
Das heißt, alle Elemente in einer Sequenz finden, die eine bestimmte Bedingung erfüllen. Sie können dafür Listenverständnis oder Generatorausdrücke verwenden:
matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
Letzterer gibt einen Generator zurück, den Sie sich als eine Art Lazy List vorstellen können, der erst erstellt wird, wenn Sie ihn durchlaufen. Übrigens ist der erste genau gleichbedeutend mit
matches = filter(fulfills_some_condition, lst)
in Python 2. Hier sehen Sie Funktionen höherer Ordnung bei der Arbeit. Gibt in Python 3 filter
keine Liste zurück, sondern ein generatorähnliches Objekt.
Das erste Vorkommen finden
Wenn Sie nur das erste möchten, das einer Bedingung entspricht (aber Sie wissen noch nicht, was es ist), ist es in Ordnung, eine for-Schleife zu verwenden (möglicherweise auch die else
Klausel, die nicht wirklich bekannt ist). Sie können auch verwenden
next(x for x in lst if ...)
Dies gibt das erste Match zurück oder erhöht ein, StopIteration
wenn keines gefunden wird. Alternativ können Sie verwenden
next((x for x in lst if ...), [default value])
Suchen des Standorts eines Elements
Für Listen gibt es auch die index
Methode, die manchmal nützlich sein kann, wenn Sie wissen möchten, wo sich ein bestimmtes Element in der Liste befindet:
[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
Beachten Sie jedoch, dass bei Duplikaten .index
immer der niedrigste Index zurückgegeben wird: ......
[1,2,3,2].index(2) # => 1
Wenn es Duplikate gibt und Sie alle Indizes möchten, können Sie enumerate()
stattdessen Folgendes verwenden :
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
myList
.