Listas y Tuplas

La listas junto con los diccionarios, que los veremos en un próximo artículo, son dos de los tipos de datos más importantes que utilizan los lenguajes de programación y en ciencia de datos cobran especial relevancia.

Una lista se puede definir como una colección ordenada de datos que el Python pueden ser de cualquier tipo. Es un objeto mutable lo que implica que una vez creada puede ser modificada.

Crear listas

Para crear una lista tenemos tres formas rápidas de hacerlo, escribiremos en el editor de código Python:

import pandas as pd

# Especifica la ruta del archivo CSV
ruta_csv = 'titanic.csv'

# Carga el archivo CSV en un DataFrame de pandas
data_frame = pd.read_csv(ruta_csv)

# Muestra las primeras filas del DataFrame para verificar la carga
print(data_frame.head())

Vamos a trabajar con una data relacionada con los supervivientes del naufragio del Titanic.

Para saber que tipo de dato es un objeto en Python usaremos la función type. Por ejemplo, type(l1) no devolverá list, indicando que es un objeto de tipo lista. type( l1[0]) nos devolverá str, indicando que el primer elemento de la lista l1 es de tipo str.

Obtener datos

Los elementos de una lista se numeran del 0 en adelante, de modo que si queremos obtener el primero de los elementos creamos una lista l1 e imprimimos por consola l1[0] El valor int que escribimos entre corchetes se llama índice o índex. Si queremos obtener el último de los elementos usaremos l1[-1] o bien l1[4]. El índice que corresponde al ultimo elemento no sería 5, sino 4, ya que se comienza a numerar por 0. Si queremos obtener el penúltimo elemento usaremos l1[-2] o bien l1[3] .

l1 = ["coche", "casa", 3, "avión", 4.5]
print(l1[0])  #devuelve "coche"
print(l1[-1]) #devuelve 4.5
print(l1[4])  #devuelve 4.5
print(l1[-2]) #devuelve "avión"
print(l1[3])  #devuelve "avión"

Cuando queremos obtener un conjunto de datos usamos slicing , esta notación no es exclusiva de la listas. Un ejemplo de slicing sería l1[1:4], obtenemos los elementos que ocupan desde el índex=1 hasta el índex=2, es decir es un intervalo cerrado por la izquierda y abierto por la derecha. Si queremos todos los elementos escribimos l1[ : ] . Si queremos desde el índex=2 hasta el último , escribimos l1[2: ]. También podemos obtener los elementos de n en n. Usaremos l1[ :: 2] para obtenerlos de dos en dos .

l1 = ["coche", "casa", 3, "avión", 4.5, "persona", "motocicleta",7]
#slicing
print(l1[1:3]) #devuelve ['casa', 3, 'avión']
print(l1[:]    #devuelve todos los elementos de la lista
print(l1[2:])  #devuelve [3, 'avión', 4.5, 'persona', 'motocicleta', 7]
print(l1[::2]) #devuelve ['coche', 3, 4.5, 'motocicleta']

Para saber la longitud de una lista y en general la longitud de cualquier objeto de Python podemos usar la función len. Si escribimos para una lista l1, en la consola len(l1), obtendremos un int con el valor de la longitud.

Añadir, modificar y borrar datos

Una lista es un objeto de una clase list, las clases se verán en otro post, pero lo importante es entender que por ser un objeto podrá tener atributos y métodos. Los métodos son funciones que nos permiten hacer operaciones con el objeto. Para añadir un elemento a la lista usaremos el método append , como parámetro le pasaremos el nuevo elemento. Podemos necesitar insertar un elemento en un lugar concreto de la lista, para ello usaremos el método insert , al que le pasaremos dos parámetros ,el índex , que es la posición que queremos que ocupe en la lista y el elemento que queremos insertar.

l1 = ["España", "Portugal", "Francia"]
l1.append("Chile")
print(l1)  #devuelve ['España', 'Portugal', 'Francia', 'Chile']
l1.insert(2, "Argentina")
print(l1)  #devuelve ['España', 'Portugal', 'Argentina', 'Francia', 'Chile']

Para modificar un elemento de una lista, necesitamos conocer el index del elemento que queremos modificar y referenciarlo:

l1 = ["España", "Portugal", "Francia"]
l1[1] = "Peru"  #modificamos el valor del elemento almacenado en el index 1
print(l1)       #devuelve ["España", "Peru", "Francia"]

Para eliminar un elemento de una lista podemos usar el método pop, donde pasamos por parámetro el índex del elemento que queremos eliminar. Sino conocemos el índex otra alternativa es usar el método remove, donde le pasamos como parámetro el nombre del elemento. Por último si queremos eliminar todos los elementos de la lista usaremos clear.

l1 = ["España", "Portugal", "Francia", "China"]
l1.pop(2)
print(l1)  #devuelve ['España', 'Portugal', 'China']
l1.remove("China")   
print(l1)  #devuelve ['España', 'Portugal']
l1.clear()
print(l1)  #devuelve []          

Para saber los métodos que tiene un objeto y obtener una descripción de sus funcionalidades podemos usar la función help. Si escribimos para una lista l1, en la consola help(l1), obtendremos información sobre sus métodos.

Tuplas

Las tuplas se puede definir como una colección ordenada de datos que el Python pueden ser de cualquier tipo. Es un objeto inmutable lo que implica que una vez creado no puede ser modificado. En lugar de corchetes usaremos paréntesis al definirlas. La tuplas no poseen métodos para añadir , modificar o borrar. Podemos obtener elementos de las tuplas del mismo modo que hacemos en las listas. Podemos transformar una tupla en lista mediante la función list y una lista en una tupla mediante tuple.

#podemos definir tuplas de la siguientes maneras
t1= ()
t2 =tuple()
t3 =("coche", "casa", 3, "avión", 4.5)
print(t1[3]) #devuelve 'avión'

l1 = list(t3)  #convertimos la tupla en una lista
t4 = tuple(l1) #convertimos la lista en una tupla

Ejercicios

Ejercicio 1: Crear una lista compuesta de números del 1 al 7. Usar help para encontrar un método que nos devuelva la lista en orden inverso.
Ejercicio 2: Añadir a la lista anterior otro número 6. Borrar el numero 5. Investigar el método index. Modificar el numero 2 por la palabra ‘dos’.
Ejercicio 3: Usar help para encontrar un método que nos devuelva el número de veces que está repetido el numero 6 en la lista.
#solucion ejercicio 1
l1 =[1,2,3,4,5,6,7]
l1.reverse()
print(l1)  #devuelve [7, 6, 5, 4, 3, 2, 1]

#solucion ejercicio 2
l1.append(6)
l1.remove(5)
l1[l1.index(2)]='dos'  #usamos el método index para conocer el índice del numero 2

#solucion ejercicio 3
repeticiones = l1.count(6)  
print(repeticiones) #devolverá 2