[pyar] Consulta: lógica de las listas Listas

fisa fisadev en gmail.com
Vie Dic 2 16:34:31 ART 2011


El 2 de diciembre de 2011 16:16, Diego Uribe Gamez <
diego.uribe.gamez en gmail.com> escribió:

> Pues nada, mira:
>
> Traceback (most recent call last):
>   File "svr_udp_gps2.py", line 77, in <module>
>     Cadenapura[0] = host
> IndexError: list assignment index out of range
>
> Que es lo que quiero, quiero almacenar host y port en la Lista, junto a
> todos los datos que entran del gps.
>
> Gracias.
>

Es casi el mismo error que antes. En este caso no estás intentando leer una
posición que no existe, sino que estás intentando guardar en una posición
que no existe de la lista. Fijate que es lo que el error dice ("list
assignment index out of range" = "índice de la asignación a la lista fuera
de rango")

Siendo breve, para poder usar mi_lista[x] en mi programa (siendo x una
posición), mi_lista tiene que ser una lista *que tenga la posición x*. Si
mi_lista no tiene posición x, no puedo ni leer y escribir en esa posición.
Es como tratar de meter cosas en una caja, o sacar cosas de una caja,
cuando la caja no existe. Pensá a la lista como una serie de cajas atadas.

mi_lista[0] = cosa_primera
Es como decir "pone cosa_primera en la primer caja"
Si la caja no existe, no puedo meter nada, no tengo caja.

Tenés varias opciones.

Una es crear la lista con las posiciones y cosas ya adentro de la lista.
Algo así:

mi_lista = [cosa_primera, cosa_segunda, cosa_tercera]

Esto sería como decir "crea una lista con 3 lugares (3 cajas), con los
contenidos: cosa_primera, cosa_segunda y cosa_tercera"

Algunas veces no vas a poder hacer eso porque no sabés qué elementos poner
desde el inicio. En esos casos lo normal es la segunda opción: crear una
lista vacía y después ir *agregando posiciones* (sería como ir sumando
nuevas cajas con cosas a la cadena de cajas atadas).
Algo así:

# creamos una lista vacía
mi_lista = []

mi_lista.append(cosa_primera)
# agregamos una nueva cosa, que se agrega como posición nueva al final de
la lista
# ahora la lista tiene largo 1 (1 sola caja, la [0], donde guardar cosas, y
ya le guardamos cosa_primera en esa caja)
# la lista queda como [cosa_primera]

mi_lista.append(cosa_segunda)
# la ilsta queda como [cosa_primera, cosa_segunda]

mi_lista.append(cosa_tercera)
# la lista queda como [cosa_primera, cosa_segunda, cosa_tercera]

Por último, otra opción pero fea sería crear una lista con la cantidad de
posiciones que querés, pero vacías, desde el inicio. Y después ir metiendo
en las posiciones lo que quieras.
Sería algo así:

mi_lista = [None,] * 3
# con eso creamos una lista con 3 posiciones, que cada una tiene None
(nada) adentro:
# mi_lista queda como [None, None, None]

mi_lista[0] = cosa_primera
# mi_lista queda como [cosa_primera, None, None]

mi_lista[1] = cosa_segunda
# mi_lista queda como [cosa_primera, cosa_segunda, None]

mi_lista[2] = cosa_tercera
# mi_lista queda como [cosa_primera, cosa_segunda, cosa_tercera]

Pero no es una opción tan linda, son mejores las otras.

Creo que antes de seguir con tu proyecto tendrías que tomarte un tiempito
para leer algún buen tutorial de programación en python, donde puedas
agarrarle la mano a algunas cosas escenciales de la programación que no
estás manejando, y que te van a hacer renegar mucho sin entender qué pasa.
En otro hilo se están recomendando unos cuantos libros/tutoriales bastante
buenos, pegale una mirada.

Saludos!

-- 
fisa  -  Juan Pedro Fisanotti
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20111202/ca814552/attachment.html>


More information about the pyar mailing list