CAPÍTULO 5 Estructuras de datos

 CAPÍTULO 5 Estructuras de datos

Si bien ya hemos visto una sección sobre Tipos de datos, podríamos hablar de tipos de datos más complejos en Python que se constituyen en estructuras de datos. Si pensamos en estos elementos como átomos, las estructuras de datos que vamos a ver sería moléculas. Es decir, combinamos los tipos básicos de formas más complejas. De hecho, esta distinción se hace en el Tutorial oficial de Python. Trataremos distintas estructuras de datos como listas, tuplas, diccionarios y conjuntos.

5.1 Listas

 CAPÍTULO 5 Estructuras de datos

Las listas permiten almacenar objetos mediante un orden definido y con posibilidad de duplicados. Las listas son estructuras de datos mutables, lo que significa que podemos añadir, eliminar o modificar sus elementos.

5.1.1 Creando listas

Una lista está compuesta por cero o más elementos. En Python debemos escribir estos elementos separados por comas y dentro de corchetes. Veamos algunos ejemplos de listas:

 CAPÍTULO 5 Estructuras de datos

Nota: Una lista puede contener tipos de datos heterogéneos, lo que la hace una estructura de datos muy versátil.

Ejecución paso a paso a través de Python Tutor:

https://cutt.ly/Ofiiare

5.1.2 Conversión

Para convertir otros tipos de datos en una lista podemos usar la función list():

 CAPÍTULO 5 Estructuras de datos

Si nos fijamos en lo que ha pasado, al convertir la cadena de texto Python se ha creado una lista con 6 elementos, donde cada uno de ellos representa un carácter de la cadena. Podemos extender este comportamiento a cualquier otro tipo de datos que permita ser iterado (iterables).

Otro ejemplo interesante de conversión puede ser la de los rangos. En este caso queremos obtener una lista explícita con los valores que constituyen el rango [0, 9]:

 CAPÍTULO 5 Estructuras de datos

Lista vacía

Existe una manera particular de usar list() y es no pasarle ningún argumento. En este caso estaremos queriendo convertir el «vacío» en una lista, con lo que obtendremos una lista vacía:

 CAPÍTULO 5 Estructuras de datos

Truco: Para crear una lista vacía, se suele recomendar el uso de [] frente a list(), no sólo por ser más pitónico sino por tener (en promedio) un mejor rendimiento en tiempos de ejecución.

5.1.3 Operaciones con listas

Obtener un elemento

Igual que en el caso de las cadenas de texto, podemos obtener un elemento de una lista a través del índice (lugar) que ocupa. Veamos un ejemplo:

 CAPÍTULO 5 Estructuras de datos

El índice que usemos para acceder a los elementos de una lista tiene que estar comprendido entre los límites de la misma. Si usamos un índice antes del comienzo o después del final obtendremos un error (excepción):

 CAPÍTULO 5 Estructuras de datos

Trocear una lista

El troceado de listas funciona de manera totalmente análoga al troceado de cadenas. Veamos algunos ejemplos:

 CAPÍTULO 5 Estructuras de datos

 CAPÍTULO 5 Estructuras de datos

En el troceado de listas, a diferencia de lo que ocurre al obtener elementos, no debemos preocuparnos por acceder a índices inválidos (fuera de rango) ya que Python los restringirá a los límites de la lista:

 CAPÍTULO 5 Estructuras de datos

Importante: Ninguna de las operaciones anteriores modifican la lista original, simplemente devuelven una lista nueva.

Invertir una lista

Python nos ofrece, al menos, tres mecanismos para invertir los elementos de una lista: Conservando la lista original: Opción 1: Mediante troceado de listas con step negativo:

 CAPÍTULO 5 Estructuras de datos

 CAPÍTULO 5 Estructuras de datos

Opción 2: Mediante la función reversed():

 CAPÍTULO 5 Estructuras de datos

Modificando la lista original: Utilizando la función reverse() (nótese que es sin «d» al final):

 CAPÍTULO 5 Estructuras de datos

Añadir al final de la lista

Una de las operaciones más utilizadas en listas es añadir elementos al final de las mismas. Para ello Python nos ofrece la función append(). Se trata de un método destructivo que modifica la lista original:

 CAPÍTULO 5 Estructuras de datos

Creando desde vacío

Una forma muy habitual de trabajar con listas es empezar con una vacía e ir añadiendo elementos poco a poco. Se podría hablar de un patrón creación.

Supongamos un ejemplo en el que queremos construir una lista con los números pares del (0,20):

 CAPÍTULO 5 Estructuras de datos

Ejecución paso a paso a través de Python Tutor:

https://cutt.ly/2fiS9Ax

Añadir en cualquier posición de una lista

Ya hemos visto cómo añadir elementos al final de una lista. Sin embargo, Python ofrece una función insert() que vendría a ser una generalización de la anterior, para incorporar elementos en cualquier posición. Simplemente debemos especificar el índice de inserción y el elemento en cuestión. También se trata de una función destructiva:

 CAPÍTULO 5 Estructuras de datos

Nota: El índice que especificamos en la función insert() lo podemos intepretar como la posición delante (a la izquierda) de la cual vamos a colocar el nuevo valor en la lista.

Al igual que ocurría con el troceado de listas, en este tipo de inserciones no obtendremos un error si especificamos índices fuera de los límites de la lista. Estos se ajustarán al principio o al final en función del valor que indiquemos:

 CAPÍTULO 5 Estructuras de datos

Consejo: Aunque es posible utilizar insert() para añadir elementos al final de una lista, siempre se recomienda usar append() por su mayor legibilidad:

 CAPÍTULO 5 Estructuras de datos

Repetir elementos

Al igual que con las cadenas de texto, el operador * nos permite repetir los elementos de una lista:

 CAPÍTULO 5 Estructuras de datos

 CAPÍTULO 5 Estructuras de datos

Combinar listas

Python nos ofrece dos aproximaciones para combinar listas:

Conservando la lista original: Mediante el operador + o +=:

 CAPÍTULO 5 Estructuras de datos

Modificando la lista original: Mediante la función extend():

 CAPÍTULO 5 Estructuras de datos

Hay que tener en cuenta que extend() funciona adecuadamente si pasamos una lista como argumento. En otro caso, quizás los resultados no sean los esperados. Veamos un ejemplo:

 CAPÍTULO 5 Estructuras de datos

El motivo es que extend() «recorre» (o itera) sobre cada uno de los elementos del objeto en cuestión. En el caso anterior, al ser una cadena de texto, está formada por caracteres. De ahí el resultado que obtenemos.

Se podría pensar en el uso de append() para combinar listas. La realidad es que no funciona exactamente como esperamos; la segunda lista se añadiría como una sublista de la principal:

 CAPÍTULO 5 Estructuras de datos

Modificar una lista

Del mismo modo que se accede a un elemento utilizando su índice, también podemos modificarlo:

 CAPÍTULO 5 Estructuras de datos

En el caso de acceder a un índice no válido de la lista, incluso para modificar, obtendremos un error:

 CAPÍTULO 5 Estructuras de datos

Publicaciones Similares