2012-09-22 18 views
5

Ok, quindi si tratta di due domande. Innanzitutto, voglio sapere se esiste un modo per verificare se esiste un indice di una lista. Ad esempio, voglio incrementare la lista [i] ogni volta che una determinata condizione è vera usando un codice come list[i] += 1, ma se l'indice non esiste, mi viene dato un errore. Quindi voglio impostare un test che, in caso di errore, faccia qualcosa come list.append(1). Quale codice potrebbe realizzare una tale condizione di test? If list[i] genera un errore.Verifica se esiste un indice di un elenco

Come domanda di follow-up, una volta stabilito il test, esiste un modo per creare un indice di elenco oltre all'utilizzo del metodo Append sopraccitato?

+3

è possibile utilizzare 'try..except' e acquisire' IndexError', all'interno tranne che è possibile aggiungere l'elenco – avasal

+2

@avasal questo non è ciò che le eccezioni sono fatte per – igor

risposta

8

Sembra che quello che si vuole veramente sia un defaultdict - non una lista tanto quanto una mappatura di interi a una specie di conteggio del numero di volte in cui li si è visti.

(questo è davvero vicino al concetto di autovivificaiton in perl, se hai utilizzato prima)

Questo codice avrebbe funzionato:

from collections import defaultdict 

# don't name a variable 'list'; you'll end up hiding the actual list type 
my_List = defaultdict(int) # create a mapping, elements will default to 0 

quindi è possibile utilizzare

my_list[i] += 1 

per qualsiasi valore di i. Se è stato visto prima, allora lo incrementerà. Se no, allora my_list[i] otterrà un valore predefinito di 0, che verrà immediatamente incrementato di 1.

3

c'è un modo per creare un indice di lista oltre all'utilizzo del metodo append di cui sopra?

Sì con il metodo Range.

indexList = range(len(nameList)) # create a list of indexes 
print "Index list:", indexList 

for i in indexList:   # Pick items out of the list 
    print ">>>", nameList[i] 

modo migliore per testare per null variabili in Python è ... (E 'molto importante che None è maiuscola e non minuscola).

if list[i] != None: #check if there is something there 
    print "Oh hello... " + list[i] 
else: 
    print "Nothing to see here, move along" 
7

di prova, se esiste un indice:

if 0 <= i < len(list): ... do something with list[i] ... 
else: ... i is out of bounds, do something else ... 

In questa situazione, siete probabilmente meglio utilizzare un dict al posto di un array, ed eventualmente un defaultdict.

1

primo luogo, voglio sapere se c'è un modo per verificare se un indice di una lista esiste.

Si può approfittare del fatto che gli indici della lista sono numerici (a partire da 0), e vengono ricalcolate quando le liste sono modificate:

if i <= len(mylist): 
    print mylist[i] 

L'altro modo, al fine di evitare il IndexError è quello di catturare esso:

try: 
    mylist[i] += 1 
except IndexError: 
    print "No item at ", i 

c'è alcun modo per creare un indice elenco oltre a utilizzare il suddetto metodo append ?

Non si "crea" un indice, esso viene impostato automaticamente quando si aggiungono o eliminano elementi da un elenco. Quindi l'unico modo per creare un indice è aggiungere un elemento alla lista.

Di solito è una bandiera di cattivo design se si "preimpostano" costantemente l'elenco, ovvero si imposta un elenco di grandi dimensioni con un valore predefinito e quindi si passa da esso.

Problemi correlati