Ho codice che sembra qualcosa di simile:Il modo migliore per gestire list.index (potrebbe non esistere) in python?
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
ok così che è semplificato, ma si ottiene l'idea. Ora thing
potrebbe non essere effettivamente nella lista, nel qual caso voglio passare -1 come thing_index
. In altre lingue questo è quello che ci si aspetta index()
da restituire se non è stato possibile trovare l'elemento. Infatti getta un ValueError
.
avrei potuto fare questo:
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
Ma questo si sente sporca, più io non so se ValueError
potrebbe essere sollevato per qualche altro motivo. Sono venuto con la seguente soluzione basata su funzioni del generatore, ma sembra un po 'complessa:
thing_index = ([(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1])[0]
C'è un modo più pulito per ottenere la stessa cosa? Supponiamo che l'elenco non sia ordinato.
s/catch/eccetto /: o) –
"... nel qual caso voglio passare -1 come' thing_index'" - Questo è decisamente non-Pythonic. Passare un valore token (senza significato) nel caso in cui un'operazione non riesca è disapprovato - le eccezioni sono davvero la giusta via qui. Soprattutto perché 'thing_list [-1]' è un'espressione valida, che significa l'ultima voce nella lista. –
@jellybean: * facepalm * ... trova il codificatore java: P – Draemon