Listas y estructuras de datos en Python 3

En Python para estructurar nuestros datos podemos utilizar listas, cuya característica principal es el orden de sus elementos. Las listas pueden ser heterogéneas, es decir que los elementos pueden ser de distintos tipos. En segundo lugar mutables, ya que los tipos de datos pueden ser modificados.

Elementos de una lista

Los tipos de elementos que conviven dentro de una lista pueden ser de un mismo tipo de datos o diferente, es decir heterogéneos. Con esto quiero decir que puedes almacenar en tus listas datos cuyo valor puede ser un int, float, string, etc y se encierran entre corchetes [].

Veamos un ejemplo de lista con datos de tipo string, entero, float y booleano:

l = ["Rosa", 40, 2313.32, True]
l
# Salida
["Rosa", 40, 2313.32, True]

Una lista no necesariamente debe de almacenar diferentes tipos de datos, sino que dependiendo el uso que vayas a darle deberás de diseñar su estructura según su funcionalidad.

Veamos una lista con un mismo tipo de dato donde vamos a extraer el índice 0, que es BMW:

marca = ["BMW", "Seat", "Tesla", "Volkswagen"]
marca[0]
# Salida
["BMW"]

Este tipo de práctica es muy habitual entre los programadores a la hora de estructurar datos específicos y a lo mejor ahora no tiene mucho sentido para ti. Lo verás más claro más adelante concatenando listas.

Manipular los elementos de una lista

Cada elemento de la lista tiene su propio índice y empieza por el 0 y así sucesivamente. También podemos referirnos a los elementos en orden negativo, desde el índice -1 hasta el último, es decir -2, -3, etc.

Veamos un ejemplo con un indice positivo y luego negativo:

marca = ["BMW", "Seat", "Tesla", "Volkswagen"]
# Imprime desde el índice 0 hasta el 2
marca[0:2]
# Salida
['BMW', 'Seat']
# Recorre desde el indice 0 que es BMW
# hasta el 2 sin mostrarlo

En esta ocasión vamos a utilizar un índice negativo y recuperar las últimos dos elementos que son Tesla y Volkswagen:

marca = ["BMW", "Seat", "Tesla", "Volkswagen"]
# Imprime desde el índice -2 hasta el último elemento
marca[-2:]
# Salida
['Tesla', 'Volkswagen']
# Ya que el último índice es -1 y el penúltimo -2

En definitiva, puedes imprimir los diferentes tipos de datos de una lista dependiendo de la necesidad y los elementos que quieres manipular.

La función len, max y min

La función len() nos devuelve la longitud de una cadena de caracteres o en este caso el número de elementos de una lista. El siguiente ejemplo sumaremos dos listas y con la función len averiguaremos el número de elementos final de nuestra lista.

Función len()

a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = a + b
print(len(c))
# Salida
8

Función max() y min()

También podemos saber cual es el elemento máximo o mínimo de la lista con max() y min():

print(max(c)) # Elemento máximo
print(min(c)) # Elemento mínimo
# Salida
8
1

Listas anidadas

Como te he comentado al principio de este artículo en las listas se pueden almacenar diferentes tipos de datos, entre ellos las propias listas. Las listas anidadas son aquellas que están dentro de otras listas almacenando datos específicos de una lista concreta.

Imaginémonos que queremos guardar datos sobre los empleados de una empresa por nombre, edad y salario. En el siguiente ejemplo veremos cómo acceder a elementos concretos de listas anidadas.

# Lista 1 [nombre], 2 [edad], 3 [salario]
l = [["Juan", "Pedro", "Marcos"],
     [34, 23, 45],
     [1500, 1650, 3000]]
# Imprimimos el elemento 0 que es la lista en sí
# y el elemento 1 de dicha lista que es Pedro
l[0][1]
# Salida
Pedro

Recomendación

Es importante que las listas anidadas estén encerradas entre corchetes []. Una buena práctica para no olvidarte es abrir con doble corchete [[]] y después de cada coma hacer un intro como en el ejemplo anterior, así evitarás errores y ahorrarás tiempo.

Concatenar listas o replicarlas

El operador de concatenación + nos da la opción de concatenar listas e imprimir los elementos de cada una de ellas sobre una nueva lista, en el mismo orden de la concatenación.

marca = ["BMW", "Seat", "Tesla", "Volkswagen"]
nueva_marca = ["Lexus", "Skoda"]
marca + nueva_marca
# Salida
['BMW', 'Seat', 'Tesla', 'Volkswagen', 'Lexus', 'Skoda']

Como te comentaba al principio del artículo, ahora le verás sentido a la forma de estructurar los datos de un mismo tipo.

En el caso de que tengas que almacenar un tipo de dato específico y a la vez vincularlo a otros, la concatenación te permite imprimir todo un conjunto de listas creando una lista nueva.

Imaginémonos que tengas que mostrar los datos de una matriz donde tengas almacenados datos de vehículos de un concesionario en diferentes listas, podrías aprovechar la siguiente estructura:

marcacategoríaserienuevo_vehículoobsoleto_vehículo

Las listas también permiten replicar los elementos que la componen por medio del signo de multiplicación *. Sería lo mismo que concatenar sus elementos un determinado número de veces.

Veamos el siguiente ejemplo:

num = [0, 1]
num * 10
# Salida
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

Extraer datos con bucles

Antes de hablar de bucles doy por hecho que sabes qué son y de que entiendes su funcionalidad, sino, puedes echar un vistazo a Bucle while y for en Python 3.

Dicho esto, veamos como podemos recorrer los elementos de una lista directamente por medio de un bucle for:

marca = ["BMW", "Seat", "Tesla", "Volkswagen"]
for i in marca:
  print(i)
# Salida
BMW
Seat
Tesla
Volkswagen

Se interpreta que i (índice) en la lista marca itere e imprima todos sus elementos.

Métodos de las listas

A continuación vamos a ver todos los métodos del objeto lista:

  • Método de agregación
  • Método de eliminación
  • Método de ordenación
  • Método de búsqueda

Método append(«nuevo_elemento»)

Agrega un elemento al final de la lista:

name = ["Fresa", "Aguacate", "Piña", "Fran"]
name.append("Coco")
print(name)
# Salida
['Fresa', 'Aguacate', 'Piña', 'Fran', 'Coco']

Método extend(otra_lista)

Añade varios elementos al final de la lista:

marca = ["BMW", "Seat", "Tesla", "Volkswagen"]
marca.extend(["Fiat", "Lexus"])
print(marca)
# Salida
['BMW', 'Seat', 'Tesla', 'Volkswagen', 'Fiat', 'Lexus']

Método insert(posición, «nuevo_elemento»)

Inserta un elemento en una posición determinada de la lista:

marca = ["BMW", "Seat", "Tesla", "Volkswagen"]
marca.insert(2, "Maserati")
print(marca)
# Salida - Posición 2
["BMW", "Seat", "Maserati", "Tesla", "Volkswagen"]

Método pop()

Elimina el último elemento de la lista:

marca = ["BMW", "Seat", "Tesla", "Volkswagen", "Fiat", "Lexus"]
for i in range(3):
    print(marca.pop())
    print(marca)
# Salida
# Elementos que ya no están en la lista
Lexus
Fiat
Volkswagen
# Elementos que siguen en la lista
['BMW', 'Seat', 'Tesla']

Método pop(índice)

Elimina un elemento de la lista por su índice:

marca = ["BMW", "Seat", "Tesla", "Volkswagen"]
marca.pop(2) 
# Salida - Índice 2
'Tesla'

Método remove(elemento)

Recibe como argumento un elemento y lo borra de la lista:

marca = ["BMW", "Seat", "Tesla", "Volkswagen"]
marca.remove("Seat")
print(marca)
# Salida
["BMW", "Tesla", "Volkswagen"]

Método sort()

Ordena los elementos de una lista de forma ascendente:

l = [1,3,6,4,5,2]
l.sort()
print(l)
# Salida
[1, 2, 3, 4, 5, 6]

Método sort(reverse = True)

Ordena los elementos de una lista de forma descendente:

l = [1,3,6,4,5,2]
l.sort(reverse = True)
print(l)
# Salida
[6, 5, 4, 3, 2, 1]

Método reverse()

Ordena una lista al revés, es decir, revierte el orden:

marca = ["BMW", "Seat", "Tesla", "Volkswagen"]
marca.reverse()
print(marca)
# Salida
['Volkswagen', 'Tesla', 'Seat', 'BMW']

Método count()

Cuenta la cantidad de veces que aparece un elemento:

name = ["María", "Rosa", "Laura", "María"]
name.count("María")
# Salida
2

Método index(elemento[, i_inicio, i_fin])

Obtiene el primer índice del elemento y devuelve el índice del primer elemento de la lista dada como argumento.

name = ["María", "Rosa", "Laura"]
name.index("Rosa")
# Salida
1

Argumentos opcionales de index

name = ["María", "Rosa", "Laura"]
name.index("Rosa", 0, 2)
# Salida
1
# Realiza la búsqueda del elemento entre los
# índices marcados como argumento

Conclusión

Si estás aprendiendo a programar en Python para dedicarte a la ciencia o al análisis de datos, las listas son un buen comienzo en las estructuras de datos para entender a como insertar, modificar, buscar y borrar datos, antes de dar el salto a los diccionarios, tuplas o las bases de datos SQL y NoSQL.

¿Te ha parecido útil?