Per quanto riguarda la tua prima domanda: quel codice va benissimo e dovrebbe funzionare se è item
uguale a uno degli elementi all'interno myList
. Forse provi a trovare una stringa che non corrisponde esattamente a uno degli elementi o forse stai usando un valore float che risente di inesattezze.
Per quanto riguarda la tua seconda domanda: in realtà ci sono diversi modi per "trovare" le cose negli elenchi.
Verifica se qualcosa è dentro
Questo è il caso d'uso che descrivi: Verifica se qualcosa è dentro una lista o no. Come sai, puoi usare l' in
operatore per questo:
3 in [1, 2, 3] # => True
Filtraggio di una raccolta
Cioè, trovare tutti gli elementi in una sequenza che soddisfano una determinata condizione. È possibile utilizzare la comprensione dell'elenco o le espressioni del generatore per questo:
matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
Quest'ultimo restituirà un generatore che puoi immaginare come una sorta di elenco pigro che verrà creato non appena lo eseguirai. A proposito, il primo è esattamente equivalente a
matches = filter(fulfills_some_condition, lst)
in Python 2. Qui puoi vedere le funzioni di ordine superiore al lavoro. In Python 3, filter
non restituisce un elenco, ma un oggetto simile a un generatore.
Trovare la prima occorrenza
Se vuoi solo la prima cosa che corrisponde a una condizione (ma non sai ancora cosa sia), va bene usare un ciclo for (possibilmente usando anche la else
clausola, che non è molto conosciuta). Puoi anche usare
next(x for x in lst if ...)
che restituirà la prima partita o genererà un StopIteration
se non ne viene trovato nessuno. In alternativa, puoi usare
next((x for x in lst if ...), [default value])
Trovare la posizione di un oggetto
Per gli elenchi, esiste anche il index
metodo che a volte può essere utile se vuoi sapere dove si trova un determinato elemento nell'elenco:
[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
Tuttavia, tieni presente che se hai duplicati, .index
restituisce sempre l'indice più basso: ......
[1,2,3,2].index(2) # => 1
Se ci sono duplicati e vuoi tutti gli indici, puoi enumerate()
invece usare :
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
myList
.