2012-09-22 18 views
5

Bien, entonces esto es realmente dos preguntas. Primero, quiero saber si existe una forma de comprobar si existe un índice de una lista. Por ejemplo, quiero incrementar la lista [i] cada vez que una condición dada es verdadera usando código como list[i] += 1, pero si el índice no existe, recibo un error. Así que quiero configurar una prueba que, en el caso de un error, haga algo como list.append(1). ¿Qué código podría lograr tal condición de prueba? If list[i] arroja un error.Pruebe si existe un índice de una lista

Como una pregunta de seguimiento, una vez que se establece la prueba, ¿hay alguna manera de crear un índice de lista aparte de utilizar el método de apendice mencionado anteriormente?

+3

puede usar 'try..except' y capturar' IndexError', adentro excepto que puede agregar la lista – avasal

+2

@avasal esto no es para lo que están hechas las excepciones – igor

Respuesta

8

Parece que lo que realmente quiere es un defaultdict - no una lista sino una asignación de enteros a algún tipo de recuento del número de veces que los ha visto.

(esto es realmente cerca del concepto de autovivificaiton en Perl, si usted ha utilizado antes)

Este código funcionaría:

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 

continuación, puede utilizar

my_list[i] += 1 

para cualquier valor de i. Si se ha visto antes, entonces lo incrementará. Si no, entonces my_list[i] obtendrá un valor por defecto de 0, que será inmediatamente incrementa a 1.

3

¿hay alguna forma de crear un índice de lista aparte de usar el método de apendice mencionado anteriormente?

Sí con el método 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] 

mejor manera de probar para null variables en Python es ... (Es muy importante que None es mayúsculas y minúsculas no).

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

Comprueba si existe un índice:

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

En esta situación, usted es probablemente mejor usar un dict lugar de una matriz, y posiblemente un defaultdict.

1

En primer lugar, me gustaría saber si hay una manera de probar si existe un índice de una lista .

Usted puede tomar ventaja del hecho de que los índices de la lista son numéricos (empezando desde 0), y se vuelven a calcular cuando se modifican las listas:

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

La otra forma, para evitar la IndexError es atrapar que:

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

¿hay alguna manera de crear un índice de lista aparte de usar el método append mencionado ?

No "crea" un índice, se establece automáticamente cuando agrega o elimina elementos de una lista. Entonces, la única forma de crear un índice es agregar un elemento a la lista.

Por lo general, es una bandera de mal diseño si constantemente "preajusta" su lista, es decir, establece una lista grande con un valor predeterminado y luego lo atraviesa.

Cuestiones relacionadas