Estructuras de datos

Listas


En Python, una estructura de datos es una forma de organizar, gestionar y almacenar información para facilitar su acceso y modificación. Estas estructuras permiten trabajar con múltiples valores dentro de una misma variable, lo que resulta fundamental para el desarrollo de programas eficientes y estructurados.

Las estructuras de datos más comunes en Python son:

  • Listas (list)
  • Tuplas (tuple)
  • Diccionarios (dict)
  • Conjuntos (set)

Estas estructuras permiten representar colecciones de datos, y aunque en otros lenguajes reciben nombres diferentes como arrays, vectores o matrices, en Python ofrecen una sintaxis más flexible y potentes funcionalidades integradas.


Listas:

Una lista es una colección ordenada y mutable de elementos. Las listas pueden contener elementos de cualquier tipo (números, cadenas, listas, objetos, etc.), e incluso mezclar tipos distintos dentro de una misma lista.

¿Cómo se crea una lista?

Existen varias formas de crear listas:

# Lista vacía
mi_lista = []
  
# Lista con elementos
numeros = [1, 2, 3, 4]
  
# Lista con distintos tipos de datos
mixta = [1, "hola", 3.14, True]
  
# Crear una lista a partir de un objeto iterable
letras = list("Python")  # ['P', 'y', 't', 'h', 'o', 'n']
Propiedades de las listas:
  • Ordenadas: mantienen el orden en que se agregan los elementos.
  • Indexadas: se accede a sus elementos por índice ([i]).
  • Mutables: pueden modificarse después de ser creadas.
  • Dinámicas: se pueden ampliar o reducir según se necesite.
  • Anidables: pueden contener otras listas (listas de listas).
  • Permiten múltiples tipos de datos.

Acceso y modificación de elementos:

Se accede a los elementos mediante índices que inician en 0. Por ejemplo:

colores = ["rojo", "verde", "azul"]
print(colores[0])  # rojo
print(colores[-1]) # azul (último elemento)
Modificar un elemento:
colores[1] = "amarillo"
print(colores) # ["rojo", "amarillo", "azul"]
Eliminar un elemento por índice:
del colores[0]
print(colores) # ["amarillo", "azul"]
Listas anidadas:

Es posible tener listas dentro de listas:

matriz = [[1, 2], [3, 4]]
print(matriz[1][0])  # 3
Slicing (rebanado de listas):

Permite obtener sublistas:

numeros = [10, 20, 30, 40, 50]
print(numeros[1:4])  # [20, 30, 40]
print(numeros[:3])   # [10, 20, 30]
print(numeros[-2:])  # [40, 50]

También podemos modificar varias posiciones a la vez:

numeros[1:3] = [25, 35]
print(numeros)  # [10, 25, 35, 40, 50]
Operadores útiles con listas:
# Concatenar listas
a = [1, 2]
b = [3, 4]
print(a + b) # [1, 2, 3, 4]

# Repetir elementos
print(a * 2) # [1, 2, 1, 2]

# Asignación múltiple
x, y, z = [5, 6, 7]
print(x, y, z) # 5 6 7
Iterar sobre listas:
# Iteración simple
for elemento in numeros:
    print(elemento)
  
# Iteración con índices
for i in range(len(numeros)):
    print(f"Índice {i}: {numeros[i]}")
  
# Iterar con índice y valor
for i, valor in enumerate(numeros):
    print(f"{i}: {valor}")
  
# Iterar dos listas a la vez
nombres = ["Ana", "Luis"]
edades = [20, 25]
for nombre, edad in zip(nombres, edades):
    print(f"{nombre} tiene {edad} años")

Métodos de listas más utilizados:

Método Descripción
append(x) Agrega el elemento x al final de la lista.
extend([x]) Añade todos los elementos de una lista al final.
insert(i, x) Inserta x en la posición i.
remove(x) Elimina la primera aparición de x.
pop([i]) Elimina y devuelve el elemento en la posición i. Si no se indica i, elimina el último.
reverse() Invierte el orden de la lista.
sort() Ordena la lista de menor a mayor.
index(x) Devuelve el índice de la primera aparición de x.
count(x) Cuenta cuántas veces aparece x.
clear() Elimina todos los elementos de la lista.
1. append():

Agrega un elemento al final de la lista.

frutas = ["manzana", "banana"]
frutas.append("naranja")
print(frutas) # ['manzana', 'banana', 'naranja']
2.extend():

Agrega los elementos de un iterable (como otra lista) al final de la lista original.

numeros = [1, 2]
numeros.extend([3, 4])
print(numeros) # [1, 2, 3, 4]
3. insert():

Inserta un elemento x en la posición i.

letras = ["a", "b", "d"]
letras.insert(2, "c")
print(letras) # ['a', 'b', 'c', 'd']
4. remove():

Elimina la primera aparición del elemento x.

colores = ["rojo", "verde", "azul", "verde"]
colores.remove("verde")
print(colores) # ['rojo', 'azul', 'verde']
5. pop():

Elimina y devuelve el elemento en la posición i. Si no se especifica, elimina el último.

nombres = ["Ana", "Luis", "Carlos"]
eliminado = nombres.pop(1)
print(eliminado) # Luis
print(nombres) # ['Ana', 'Carlos']
6. reverse():

Invierte el orden de los elementos de la lista.

numeros = [1, 2, 3]
numeros.reverse()
print(numeros) # [3, 2, 1]
7. sort():

Ordena la lista en orden ascendente por defecto. Se puede usar con parámetros para personalizar.

edades = [30, 25, 40, 20]
edades.sort()
print(edades) # [20, 25, 30, 40]
8. index():

Devuelve el índice de la primera aparición del elemento x.

vocales = ["a", "e", "i", "o", "u"]
print(vocales.index("o")) # 3
9. count():

Devuelve cuántas veces aparece el elemento x en la lista.

notas = [10, 9, 8, 10, 7, 10]
print(notas.count(10)) # 3
10. clear():

Elimina todos los elementos de la lista.

tareas = ["leer", "escribir", "repasar"]
tareas.clear()
print(tareas) # []

Buenas prácticas al trabajar con listas:

  • Usar append() y extend() en lugar de + para mejorar el rendimiento.
  • Evitar modificar listas mientras se recorren.
  • Si necesitas una copia de una lista, usa slicing: nueva = original[:].