sembra come seCome posso verificare se esiste un indice di lista?
if not mylist[1]:
return False
non funziona.
sembra come seCome posso verificare se esiste un indice di lista?
if not mylist[1]:
return False
non funziona.
Devi solo per controllare se l'indice si desidera è nell'intervallo di 0
e la lunghezza della lista, come questo
if 0 <= index < len(list):
realtà è internall y valutata come
if (0 <= index) and (index < len(list)):
Quindi, che i controlli condizione se l'indice è compreso nell'intervallo [0, lunghezza della lista).
Nota: Python supporta l'indicizzazione negativa. Citando pitone documentation,
Se
i
oj
è negativo, l'indice è relativo alla fine della stringa:len(s) + i
olen(s) + j
viene sostituito. Ma nota che -0 è ancora 0.
Significa che ogni volta che si utilizza l'indicizzazione negativa, il valore verrà aggiunto alla lunghezza dell'elenco e il risultato verrà utilizzato. Quindi, list[-1]
ti darebbe l'elemento list[-1 + len(list)]
.
Quindi, se si desidera consentire indici negativi, allora si può semplicemente controllare se l'indice non superi la lunghezza della lista, come questo
if index < len(list):
Un altro modo per farlo è , ad eccezione IndexError
, come questo
a = []
try:
a[0]
except IndexError:
return False
return True
Quando si tenta di accedere a un elemento a un indice non valido, un IndexError
viene sollevata. Quindi, questo metodo funziona.
Nota: Il metodo lei ha citato nella questione ha un problema.
if not mylist[1]:
Diciamo 1
è un indice valido per mylist
, e se si restituisce un Falsy value. Quindi not
lo annullerà in modo che la condizione if
venga valutata come Truthy. Quindi, restituirà False
, anche se un elemento effettivamente presente nell'elenco.
Se l'indice negativo è troppo basso si otterrà un 'IndexError' per essere fuori dal range, quindi si potrebbe voler controllare 'index> = -len (list)' se lo si sta supportando. –
Un altro svantaggio del primo metodo è che Python consente indici non sequenziali tramite .insert –
Nel caso di liste di interi indicizzati, avrei semplicemente fare
if 1 < len(mylist):
...
Per dicts, si può ovviamente fare
if key in mydict:
...
Nello stile EAFP di Python:
try:
mylist[1]
except IndexError:
print "Index doesn't exist!"
'mylist [1]' restituirà l'elemento in corrispondenza dell'indice 1. Dire che questo elemento è il valore 'false', come è possibile prendere in considerazione? – alfasin
Sì, il mio codice è terribile. Quello che ho cercato di fare sembra un modo molto nonpolitico di farlo se ha funzionato. – Sundrah
Da dove prendi il valore '1'? –