Descubre cómo organizar, acceder y manipular colecciones ordenadas de datos. ¡Una herramienta esencial para cualquier programador!
Imagina que necesitas guardar una colección de elementos en un orden específico: las notas de tus exámenes, los nombres de los planetas del sistema solar, los ingredientes para una receta científica, o una secuencia de pasos en un experimento. Para esto y mucho más, Python nos ofrece las listas.
Una lista en Python es una estructura de datos que permite almacenar una colección ordenada y mutable de elementos. Esto significa que:
Las listas se definen utilizando corchetes [ ] y separando sus elementos con comas ,.
# Una lista vacía
lista_vacia = []
print(f"Lista vacía: {lista_vacia}")
# Lista de números (enteros y flotantes)
notas_matematicas = [10, 8.5, 9.2, 7.0, 9.8]
print(f"Notas: {notas_matematicas}")
# Lista de cadenas de texto (strings)
nombres_cientificos = ["Felis catus", "Canis lupus", "Homo sapiens"]
print(f"Nombres científicos: {nombres_cientificos}")
# Lista mixta (heterogénea)
datos_experimento = ["Experimento Alpha", 2024, 15.75, True]
print(f"Datos del experimento: {datos_experimento}")
🧺 Analogía: Piensa en una lista como una canasta de compras donde puedes poner diferentes productos en un orden específico. Puedes añadir más productos, quitar algunos, o cambiar un producto por otro.
Puedes acceder a los elementos individuales de una lista utilizando sus índices (posiciones). Python usa indexación basada en cero, lo que significa que el primer elemento tiene índice 0, el segundo tiene índice 1, y así sucesivamente.
# Indices: 0 1 2 3 4
elementos_quimicos = ["Hidrógeno", "Helio", "Litio", "Berilio", "Boro"]
primer_elemento = elementos_quimicos[0] # "Hidrógeno"
tercer_elemento = elementos_quimicos[2] # "Litio"
print(f"El primer elemento es: {primer_elemento}")
print(f"El tercer elemento es: {tercer_elemento}")
También puedes usar índices negativos para acceder a los elementos desde el final de la lista. El índice -1 se refiere al último elemento, -2 al penúltimo, y así sucesivamente.
# Indices: -5 -4 -3 -2 -1
elementos_quimicos = ["Hidrógeno", "Helio", "Litio", "Berilio", "Boro"]
ultimo_elemento = elementos_quimicos[-1] # "Boro"
penultimo_elemento = elementos_quimicos[-2] # "Berilio"
print(f"El último elemento es: {ultimo_elemento}")
print(f"El penúltimo elemento es: {penultimo_elemento}")
El rebanado te permite obtener una porción (una sub-lista) de una lista. La sintaxis es lista[inicio:fin:paso].
inicio: Índice del primer elemento a incluir (por defecto es 0).fin: Índice del primer elemento a no incluir (la rebanada va hasta fin-1).paso: Cada cuántos elementos tomar (por defecto es 1).# Indices: 0 1 2 3 4 5 6 7 8 9
temperaturas_diarias_C = [18.5, 19.0, 20.2, 21.5, 20.8, 19.5, 18.0, 22.1, 23.0, 21.7]
# Desde el índice 2 hasta el 4 (sin incluir el 5)
primeros_dias_calidos = temperaturas_diarias_C[2:5]
print(f"Días cálidos iniciales: {primeros_dias_calidos}") # Salida: [20.2, 21.5, 20.8]
# Desde el inicio hasta el índice 3 (sin incluir el 4)
primeros_cuatro_dias = temperaturas_diarias_C[:4]
print(f"Primeros cuatro días: {primeros_cuatro_dias}") # Salida: [18.5, 19.0, 20.2, 21.5]
# Desde el índice 5 hasta el final
ultimos_dias = temperaturas_diarias_C[5:]
print(f"Últimos días: {ultimos_dias}") # Salida: [19.5, 18.0, 22.1, 23.0, 21.7]
# Toda la lista (una copia superficial)
copia_temperaturas = temperaturas_diarias_C[:]
print(f"Copia: {copia_temperaturas}")
# Con paso: cada dos elementos
cada_dos_dias = temperaturas_diarias_C[::2]
print(f"Cada dos días: {cada_dos_dias}") # Salida: [18.5, 20.2, 20.8, 18.0, 23.0]
# Revertir una lista con slicing
lista_revertida = temperaturas_diarias_C[::-1]
print(f"Lista revertida: {lista_revertida}")
⚠️ ¡Cuidado con los Índices! Si intentas acceder a un índice que no existe en la lista (por ejemplo, elementos_quimicos[10] en una lista de 5 elementos), Python generará un error IndexError.
Como mencionamos, las listas son mutables. Esto significa que puedes cambiar su contenido después de crearlas.
# Lista de componentes de un circuito
componentes = ["Resistencia", "Capacitor", "Bobina", "Fuente"]
print(f"Lista original: {componentes}")
# Cambiar un elemento por su índice
componentes[1] = "Diodo LED" # Cambiamos "Capacitor" por "Diodo LED"
print(f"Después de cambiar el segundo elemento: {componentes}")
# Cambiar varios elementos usando slicing
componentes[2:4] = ["Transistor", "Microcontrolador"] # Cambia "Bobina" y "Fuente"
print(f"Después de cambiar un rango: {componentes}")
Las listas en Python vienen con una variedad de métodos incorporados que te permiten realizar operaciones comunes de forma sencilla. Un método es como una función que "pertenece" a un objeto (en este caso, a una lista). Se llaman usando la sintaxis nombre_lista.metodo(argumentos).
append(elemento)Añade elemento al final de la lista.
planetas = ["Mercurio", "Venus"]
planetas.append("Tierra")
# planetas es ahora ["Mercurio", "Venus", "Tierra"]
print(planetas)
extend(iterable)Añade todos los elementos de un iterable (como otra lista) al final.
mas_planetas = ["Marte", "Júpiter"]
planetas.extend(mas_planetas)
# planetas es ahora ["Mercurio", ..., "Júpiter"]
print(planetas)
insert(indice, elemento)Inserta elemento en la posición indice.
numeros = [10, 20, 40]
numeros.insert(2, 30) # Inserta 30 en el índice 2
# numeros es ahora [10, 20, 30, 40]
print(numeros)
remove(valor)Elimina la primera aparición de valor en la lista. Genera ValueError si el valor no está.
frutas = ["manzana", "banana", "cereza", "banana"]
frutas.remove("banana") # Elimina la primera "banana"
# frutas es ahora ["manzana", "cereza", "banana"]
print(frutas)
pop(indice=-1)Elimina y devuelve el elemento en indice. Si no se especifica índice, elimina y devuelve el último.
reactivos = ["Na", "Cl", "H2O"]
ultimo_reactivo = reactivos.pop() # "H2O"
# reactivos es ahora ["Na", "Cl"]
print(f"Reactivo extraído: {ultimo_reactivo}, Restantes: {reactivos}")
clear()Elimina todos los elementos de la lista.
datos_medicion = [1.2, 1.5, 1.1]
datos_medicion.clear()
# datos_medicion es ahora []
print(datos_medicion)
index(valor, inicio=0, fin=len(lista))Devuelve el índice de la primera aparición de valor. Puede generar ValueError.
notas_musicales = ["Do", "Re", "Mi", "Fa"]
posicion_mi = notas_musicales.index("Mi")
# posicion_mi es 2
print(f"La nota Mi está en el índice: {posicion_mi}")
count(valor)Devuelve el número de veces que valor aparece en la lista.
resultados_dados = [1, 2, 5, 2, 6, 2, 4]
veces_dos = resultados_dados.count(2)
# veces_dos es 3
print(f"El número 2 aparece {veces_dos} veces.")
sort(key=None, reverse=False)Ordena los elementos de la lista en su lugar (in-place). reverse=True para orden descendente.
tiempos_carrera_s = [12.5, 11.9, 13.1, 12.0]
tiempos_carrera_s.sort() # Orden ascendente
# tiempos_carrera_s es ahora [11.9, 12.0, 12.5, 13.1]
print(f"Tiempos ordenados: {tiempos_carrera_s}")
tiempos_carrera_s.sort(reverse=True) # Orden descendente
print(f"Tiempos ordenados (desc): {tiempos_carrera_s}")
reverse()Invierte el orden de los elementos de la lista en su lugar.
secuencia_pasos = ["Paso1", "Paso2", "Paso3"]
secuencia_pasos.reverse()
# secuencia_pasos es ahora ["Paso3", "Paso2", "Paso1"]
print(f"Pasos invertidos: {secuencia_pasos}")
copy()Devuelve una copia superficial (shallow copy) de la lista.
original = [1, ["a", "b"], 3]
copia_superficial = original.copy()
copia_superficial[0] = 100
copia_superficial[1][0] = "X" # Modifica también la lista interna en 'original'
print(f"Original: {original}") # [1, ['X', 'b'], 3]
print(f"Copia: {copia_superficial}") # [100, ['X', 'b'], 3]
len(lista) (Función incorporada)Aunque no es un método (se llama como len(mi_lista)), devuelve el número de elementos en la lista.
planetas = ["Mercurio", "Venus", "Tierra", "Marte"]
num_planetas = len(planetas)
# num_planetas es 4
print(f"Hay {num_planetas} planetas en la lista.")
✨ Experimenta en Colab: La mejor forma de aprender estos métodos es usándolos. Crea tus propias listas y prueba cada método en una celda de Google Colab. ¡Observa cómo cambian tus listas!
+) y Repetición (*):lista_a = [1, 2, 3]
lista_b = ["a", "b", "c"]
# Concatenación
lista_combinada = lista_a + lista_b
print(f"Concatenada: {lista_combinada}") # Salida: [1, 2, 3, 'a', 'b', 'c']
# Repetición
lista_repetida = ["eco"] * 3
print(f"Repetida: {lista_repetida}") # Salida: ['eco', 'eco', 'eco']
in y not in):
Puedes verificar si un elemento existe o no en una lista. Devuelve True o False.
elementos_nobles = ["Helio", "Neón", "Argón", "Kriptón"]
hay_helio = "Helio" in elementos_nobles
print(f"¿Está Helio en la lista?: {hay_helio}") # Salida: True
no_hay_oxigeno = "Oxígeno" not in elementos_nobles
print(f"¿No está Oxígeno en la lista?: {no_hay_oxigeno}") # Salida: True
A menudo querrás procesar cada elemento de una lista. La forma más común de hacerlo es con un bucle for.
# Ejemplo: Calcular el cuadrado de cada número en una lista
numeros = [1, 2, 3, 4, 5]
cuadrados = [] # Lista para guardar los resultados
for numero in numeros:
cuadrado = numero ** 2
cuadrados.append(cuadrado)
print(f"El cuadrado de {numero} es {cuadrado}")
print(f"Lista de cuadrados: {cuadrados}") # Salida: [1, 4, 9, 16, 25]
# Iterar con índice y valor usando enumerate()
aminoacidos = ["Alanina", "Glicina", "Serina"]
for indice, aminoacido in enumerate(aminoacidos):
print(f"Índice {indice}: {aminoacido}")
Python ofrece una sintaxis concisa y elegante para crear listas, conocida como "list comprehensions". Te permiten construir una nueva lista aplicando una expresión a cada elemento de un iterable (como otra lista) y, opcionalmente, filtrando elementos.
# Ejemplo anterior de cuadrados, ahora con list comprehension:
numeros = [1, 2, 3, 4, 5]
cuadrados_comp = [numero**2 for numero in numeros]
print(f"Cuadrados con list comprehension: {cuadrados_comp}") # Salida: [1, 4, 9, 16, 25]
# Filtrar solo los números pares y luego obtener sus cuadrados
numeros_pares_cuadrado = [n**2 for n in numeros if n % 2 == 0]
print(f"Cuadrados de pares: {numeros_pares_cuadrado}") # Salida: [4, 16]
✨ ¡Son muy "Pythónicas"! Aunque pueden parecer un poco crípticas al principio, las list comprehensions son muy poderosas y legibles una vez que te acostumbras. ¡Las explorarás más a fondo más adelante!
Una lista puede contener otras listas como elementos. Esto se conoce como listas anidadas y es útil para representar estructuras bidimensionales como matrices, tablas o tableros de juego.
# Matriz (lista de listas representando filas)
matriz_ejemplo = [
[1, 2, 3], # Fila 0
[4, 5, 6], # Fila 1
[7, 8, 9] # Fila 2
]
# Acceder a un elemento: matriz[fila][columna]
elemento_central = matriz_ejemplo[1][1] # Elemento en fila 1, columna 1
print(f"Elemento central de la matriz: {elemento_central}") # Salida: 5
# Imprimir toda la matriz fila por fila
print("Matriz completa:")
for fila in matriz_ejemplo:
print(fila)
# Ejemplo: Coordenadas de puntos en un plano (Física/Matemáticas)
puntos_ trayectoria = [[0,0], [1,2], [2,4], [3,6]]
print(f"Segundo punto de la trayectoria: {puntos_trayectoria[1]}") # Salida: [1, 2]
print(f"Coordenada Y del tercer punto: {puntos_trayectoria[2][1]}") # Salida: 4
Las listas son increíblemente versátiles. Veamos algunos ejemplos de cómo se pueden usar en diferentes campos:
Almacenar coeficientes de un polinomio, una secuencia de números (ej. serie de Fibonacci), o coordenadas de puntos.
# Coeficientes del polinomio: 2x^2 - 3x + 1
coeficientes_polinomio = [2, -3, 1]
# Primeros números de Fibonacci
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
print(f"Coeficientes: {coeficientes_polinomio}")
print(f"Fibonacci: {fibonacci}")
Registrar mediciones de un experimento (tiempo, velocidad), componentes de un vector, o estados de un sistema.
# Mediciones de tiempo (segundos)
tiempos_caida_libre = [0.0, 0.45, 0.91, 1.37, 1.84]
# Componentes de un vector fuerza (Fx, Fy, Fz) en Newtons
vector_fuerza_N = [10.5, -5.2, 3.0]
print(f"Tiempos: {tiempos_caida_libre}")
print(f"Vector Fuerza: {vector_fuerza_N} N")
Secuencia de bases de ADN, lista de especies en un hábitat, o signos vitales de pacientes.
# Pequeña secuencia de ADN (lista de bases)
secuencia_adn = ['A', 'T', 'C', 'G', 'G', 'T', 'A']
# Especies observadas en un ecosistema
especies_bosque = ["Roble", "Pino", "Ardilla", "Ciervo"]
print(f"ADN: {''.join(secuencia_adn)}")
print(f"Especies: {especies_bosque}")
Lista de elementos en una molécula, pH medidos en diferentes muestras, o pasos de un protocolo.
# pH de varias muestras
ph_muestras = [7.0, 4.5, 8.2, 6.9]
# Elementos en la molécula de glucosa (C6H12O6)
# Podríamos usar una lista de tuplas (elemento, cantidad)
# glucosa_composicion = [('C', 6), ('H', 12), ('O', 6)]
print(f"Valores de pH: {ph_muestras}")
Resultados de una encuesta (ej. respuestas sí/no), lista de eventos históricos importantes, o datos demográficos.
# Resultados de una encuesta (1=Sí, 0=No)
respuestas_encuesta = [1, 0, 1, 1, 0, 0, 1, 1]
num_si = respuestas_encuesta.count(1)
print(f"Número de respuestas 'Sí': {num_si}")
Secuencia de notas de una melodía, lista de canciones en un álbum, o duraciones de notas.
# Notas de una melodía simple
melodia_do_re_mi = ["Do4", "Re4", "Mi4", "Fa4", "Sol4"]
# Duraciones en tiempos (ej. 1=negra, 0.5=corchea)
duraciones = [1, 1, 0.5, 0.5, 2]
print(f"Melodía: {melodia_do_re_mi}")
🎨 Creatividad sin Límites: Estos son solo algunos ejemplos. ¡Piensa cómo podrías usar listas para organizar información en tus propias áreas de interés o en problemas cotidianos!
¡Has explorado el mundo de las listas en Python! Ahora sabes que son:
Las listas son una de las piedras angulares de la programación en Python. Su flexibilidad las hace indispensables para una amplia gama de tareas, desde simples almacenamientos de datos hasta la base para algoritmos más complejos y estructuras de datos avanzadas.
🚀 Sigue Practicando: La mejor manera de dominar las listas es usándolas. Intenta resolver problemas creando y manipulando listas en Google Colab. Piensa en cómo podrías aplicar listas a tus proyectos de clase o intereses personales. ¡Las posibilidades son enormes!