Domanda

Ho questo codice:

chars = #some list

try:
    indx = chars.index(chars)
except ValueError:
    #doSomething
else:
   #doSomethingElse

Voglio poterlo fare perché non mi piace causare consapevolmente eccezioni:

chars = #some list

indx = chars.index(chars)

if indx == -1:
    #doSomething
else:
   #doSomethingElse

C'è un modo per farlo?

È stato utile?

Soluzione

Nota che quest'ultimo approccio sta andando contro il "pythonic" generalmente accettato filosofia di EAFP, o " È più facile chiedere perdono che autorizzazione. " , mentre il primo lo segue.

Altri suggerimenti

if element in mylist:
    index = mylist.index(element)
    # ... do something
else:
    # ... do something else

Per il caso specifico in cui l'elenco è una sequenza di stringhe a carattere singolo, è possibile ottenere ciò che si desidera modificando in anticipo l'elenco da cercare in una stringa (ad es. '' .join (chars)).

È quindi possibile utilizzare il metodo .find (), che funziona come desiderato. Tuttavia, non esiste un metodo corrispondente per elenchi o tuple.

Un'altra possibile opzione è utilizzare invece un dizionario. ad es.

d = dict((x, loc) for (loc,x) in enumerate(chars))
...
index = d.get(chars_to_find, -1)  # Second argument is default if not found.

Questo potrebbe anche funzionare meglio se stai facendo molte ricerche nell'elenco. Se è solo una singola ricerca in un elenco usa e getta, non vale la pena farlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top