Jeśli chodzi o twoje pierwsze pytanie: ten kod jest całkowicie w porządku i powinien działać, jeśli itemró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ć inoperatora:
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 filternie 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ć elseklauzuli, 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, StopIterationjeś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ż indexmetoda, 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, .indexzawsze 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.