Jeśli chodzi o twoje pierwsze pytanie: ten kod jest całkowicie w porządku i powinien działać, jeśli item
równa się jednemu z elementów w środku myList
. Być może próbujesz znaleźć ciąg, który nie pasuje dokładnie do jednego z elementów, lub może używasz wartości zmiennoprzecinkowej, która cierpi z powodu niedokładności.
Jeśli chodzi o twoje drugie pytanie: istnieje kilka możliwych sposobów „znalezienia” rzeczy na listach.
Sprawdzanie, czy coś jest w środku
Oto opisany przypadek użycia: Sprawdzanie, czy coś znajduje się na liście, czy nie. Jak wiesz, możesz do tego użyć in
operatora:
3 in [1, 2, 3] # => True
Filtrowanie kolekcji
Znalezienie wszystkich elementów w sekwencji, które spełniają określony warunek. W tym celu możesz użyć rozumienia listy lub wyrażeń generatora:
matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
Ten ostatni zwróci generator, który możesz sobie wyobrazić jako rodzaj leniwej listy, która zostanie zbudowana, gdy tylko ją przejdziesz. Nawiasem mówiąc, pierwszy jest dokładnie równoważny z
matches = filter(fulfills_some_condition, lst)
w Python 2. Tutaj możesz zobaczyć funkcje wyższego rzędu w pracy. W Pythonie 3 filter
nie zwraca listy, ale obiekt podobny do generatora.
Znalezienie pierwszego wystąpienia
Jeśli chcesz tylko pierwszą rzecz, która pasuje do warunku (ale jeszcze nie wiesz, co to jest), dobrze jest użyć pętli for (być może również użyć else
klauzuli, która nie jest tak naprawdę dobrze znana). Możesz także użyć
next(x for x in lst if ...)
który zwróci pierwszy mecz lub podbije, StopIteration
jeśli nie zostanie znaleziony. Alternatywnie możesz użyć
next((x for x in lst if ...), [default value])
Znalezienie położenia przedmiotu
W przypadku list istnieje również index
metoda, która może być czasem przydatna, jeśli chcesz wiedzieć, gdzie jest określony element na liście:
[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
Pamiętaj jednak, że jeśli masz duplikaty, .index
zawsze zwraca najniższy indeks: ......
[1,2,3,2].index(2) # => 1
Jeśli są duplikaty i chcesz mieć wszystkie indeksy, możesz enumerate()
zamiast tego użyć :
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
myList
.