Estructuras de datos básicas: Listas y Tuplas

Educator Courses » Programación básica en Python » Estructuras de datos básicas: Listas y Tuplas

Listas y tuplas

Listas y tuplas

Las listas y las tuplas son lo equivalente a los arreglos por posición en otros lenguajes, cada elemento es guardado de forma ordenada y puede ser accedido a él de acuerdo a su posición en la estructura, esta posición se llama “índice”:

selectsort

En la imágen podemos ver una lista/tupla con cinco elementos y cada uno de sus elementos puede ser accedido vía indice (el numero arriba de cada numero grande). Para poder acceder a alguno de ellos debemos hacer uso de su índice, por ejemplo, si queremos obtener el número “5” entonces debemos referirnos al indice “1”. Esto puede sonar complicado para quienes apenas empiezan a programar, pero los arreglos empiezan a partir del número cero (“0”) y no en el uno. Por lo tanto el segundo índice en el arreglo es el número “1”.

>>> estructura = [2,5,1,3,4]
>>> estructura[1]
5

Así como con las cadenas podemos obtener un elemento o una secuencia de elementos.

>>> estructura[1:3]
[5, 1]

Podemos ver entonces que los indices se colocan entre un par de corchetes “[” y “]” y que para obtener un rango de indices se ocupa “dos puntos” como separador (:). Cuando se hace uso de este separador se puede omitir alguno de los dos indices del rango, si se omite el primero entonces se asume que se requiere el indice “0” si se omite el segundo entonces se indica que se requiere el último índice. Esto se muy práctico cuando estamos hablando de una estructura donde no conocemos el numero del ultimo indice.

Hablando de tamaños… Que tamaño puede tener nuestra lista/tupla?.

Las listas y las tuplas no tienen un tamaño definido, pueden ser tan grandes como la RAM que tengamos disponible aunque depende mas de los objetos que tengamos creados. Una lista y una Tupla no son mas que “cajones” y en su contenido hay “apuntadores” a otros objetos, las listas y las tuplas no son contenedores de los objetos, es decir, no estan dentro de la RAM que ocupa una lista/tupla, por lo mismo estos objetos pueden estar en diferentes listas/tuplas.

Para saber el tamaño de nuestra lista/tupla podemos hacer uso de la función len(), con esto podemos saber el tamaño total de nuestra lista/tuploa

>>> len(estructura)
5

Con este tamaño podemos determinar el ultimo indice al restar 1 (uno) al tamaño total de la lista/tupla, recordemos que el indice empieza por el numero cero. En este caso el último índice es 4.

Que diferencia hay entre las listas y las tuplas?

Bien, ya sabemos que ambas son parecidas, ambas contienen elementos de forma ordenada y son accesibles vía “indice”, pero cuál es la diferencia?.

La principal es que las listas son mutables, es decir, pueden cambiar en cualquier momento, sin embargo las tuplas no, las tuplas son inmutables. Las listas pueden ser creadas con cero elementos e ir agregando elementos conforme se vaya necesitando, sin embargo aunque se puede crear una tupla vacía, no tiene propósito puesto que no se pueden agregar elementos.

>>> c[1:3]
(5, 1)
>>> lista = list()
>>> lista.append(1)
>>> lista
[1]
>>> lista.append(2)
>>> lista
[1, 2]
>>> lista.append(4)
>>> lista
[1, 2, 4]
>>> tupla = tuple()
>>> tupla.append(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'

Como podemos ver, para crear una lista hacemos uso de la función “list()” mientras que para crear una tupla hacemos uso de la función “tuple()”.  También podemos hacer uso de un par de atajos para crear las listas y las tuplas, en el caso de las listas podemos usar los corchetes únicamente sin texto atras ni adelante, y en el caso de las tuplas se usan paréntesis, igual, sin texto atras o adelante.

>>> lista = []
>>> type(lista)
<type 'list'>
>>> tupla = ()
>>> type(tupla)
<type 'tuple'>
>>>

La función “type” nos permite conocer el tipo de objeto que se le pasa como parámetro.

Entonces, si una lista es mutable y una tupla no es mutable…

Por qué querría usar una tupla ?

Las tuplas debemos verlas como una serie de datos que no queremos que sean alterados. Por ejemplo, los registros que se han obtenido de base de datos, que deben pasar integros a su representación.

OJO!

Mientras que la tupla no es editable, los objetos dentro de ella si lo son. Los tipos de datos complejos son pasados por referencia y no por valor, entonces estos pueden ser modificados si tenemos una referencia a ellos.

>>> class test():
...     a = 1
...
>>> inst = test()
>>> inst.a
1
>>> best = test()
>>> best.a
1
>>> c = tuple([inst, best])
>>> c
(<__main__.test instance at 0x10581c518>, <__main__.test instance at 0x10581c560>)

>> c[0].a = 2

>> c[0].a
2
>>> c[1].a
1

 

Como podemos ver, pudimos editar el valor de a  de la primera instancia que creamos.

Loading

You must be logged in to take the quiz.