TechLead
Lección 5 de 25
5 min de lectura
Python

Listas, tuplas, conjuntos y diccionarios

Inmersion profunda en los tipos de coleccion principales de Python, sus metodos y cuando usar cada uno

Listas

Las listas son secuencias ordenadas y mutables que pueden contener elementos de cualquier tipo. Son la estructura de datos mas versatil y comunmente usada en Python. Las listas soportan indexacion, rebanado y un rico conjunto de metodos para agregar, eliminar y reorganizar elementos.

# Creating lists
empty = []
numbers = [1, 2, 3, 4, 5]
mixed = [1, "two", 3.0, True, None]
nested = [[1, 2], [3, 4], [5, 6]]

# Accessing elements
print(numbers[0])     # 1 (first)
print(numbers[-1])    # 5 (last)
print(numbers[1:3])   # [2, 3] (slice)
print(numbers[::2])   # [1, 3, 5] (every other)

# Modifying lists
numbers.append(6)          # [1, 2, 3, 4, 5, 6]
numbers.insert(0, 0)       # [0, 1, 2, 3, 4, 5, 6]
numbers.extend([7, 8, 9])  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers.remove(0)          # removes first occurrence of 0
popped = numbers.pop()     # removes and returns last element (9)
popped = numbers.pop(0)    # removes and returns element at index 0

# List operations
a = [1, 2, 3]
b = [4, 5, 6]
combined = a + b         # [1, 2, 3, 4, 5, 6]
repeated = a * 3         # [1, 2, 3, 1, 2, 3, 1, 2, 3]
print(3 in a)            # True
print(len(a))            # 3

# Sorting
items = [3, 1, 4, 1, 5, 9, 2, 6]
items.sort()                  # In-place sort: [1, 1, 2, 3, 4, 5, 6, 9]
items.sort(reverse=True)      # [9, 6, 5, 4, 3, 2, 1, 1]
sorted_items = sorted(items)  # Returns new sorted list

# Sort by custom key
words = ["banana", "apple", "cherry", "date"]
words.sort(key=len)  # Sort by length: ['date', 'apple', 'banana', 'cherry']

# Unpacking
first, *rest = [1, 2, 3, 4, 5]
print(first)  # 1
print(rest)   # [2, 3, 4, 5]

first, *middle, last = [1, 2, 3, 4, 5]
print(middle)  # [2, 3, 4]

Tuplas

Las tuplas son secuencias ordenadas e inmutables. Una vez creadas, sus elementos no pueden cambiarse. Las tuplas se usan para colecciones fijas de elementos, como claves de diccionario (ya que son hashables) y para devolver multiples valores desde funciones. Son ligeramente mas eficientes en memoria que las listas.

# Creating tuples
empty = ()
single = (42,)       # Note the comma! (42) is just an int
coordinates = (3, 4)
rgb = (255, 128, 0)

# Tuple unpacking
x, y = coordinates
r, g, b = rgb
print(f"x={x}, y={y}")

# Named tuples - tuples with named fields
from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p = Point(3, 4)
print(p.x, p.y)     # 3 4
print(p[0], p[1])   # 3 4

# Tuples as dictionary keys (lists cannot be used as keys)
locations = {
    (40.7128, -74.0060): "New York",
    (51.5074, -0.1278): "London",
    (35.6762, 139.6503): "Tokyo",
}
print(locations[(40.7128, -74.0060)])  # "New York"

# Tuple methods
t = (1, 2, 3, 2, 1)
print(t.count(2))  # 2
print(t.index(3))  # 2

Conjuntos

Los conjuntos son colecciones no ordenadas de elementos unicos. Estan altamente optimizados para pruebas de pertenencia, eliminacion de duplicados y operaciones matematicas de conjuntos como union, interseccion y diferencia. Los conjuntos requieren que sus elementos sean hashables.

# Creating sets
empty = set()         # NOT {} (that creates a dict)
numbers = {1, 2, 3, 4, 5}
from_list = set([1, 2, 2, 3, 3, 3])  # {1, 2, 3}

# Adding and removing
numbers.add(6)
numbers.discard(1)   # Remove if present, no error if missing
numbers.remove(2)    # Remove if present, KeyError if missing

# Set operations
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}

print(a | b)   # Union: {1, 2, 3, 4, 5, 6, 7, 8}
print(a & b)   # Intersection: {4, 5}
print(a - b)   # Difference: {1, 2, 3}
print(a ^ b)   # Symmetric difference: {1, 2, 3, 6, 7, 8}

# Subset and superset
print({1, 2} <= {1, 2, 3})  # True (subset)
print({1, 2, 3} >= {1, 2})  # True (superset)

# Practical: remove duplicates while preserving order
items = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
seen = set()
unique = []
for item in items:
    if item not in seen:
        seen.add(item)
        unique.append(item)
print(unique)  # [3, 1, 4, 5, 9, 2, 6]

# Frozen sets (immutable sets - can be used as dict keys)
fs = frozenset([1, 2, 3])

Diccionarios

Los diccionarios son mapeos ordenados (desde Python 3.7+) de claves a valores. Proporcionan busqueda O(1) en caso promedio por clave. Los diccionarios son fundamentales en Python — impulsan los espacios de nombres de variables, atributos de clase y gran parte de los internos de Python.

# Creating dictionaries
empty = {}
person = {"name": "Alice", "age": 30, "city": "NYC"}
from_pairs = dict([("a", 1), ("b", 2)])
from_kwargs = dict(name="Alice", age=30)

# Accessing values
print(person["name"])         # "Alice"
print(person.get("email"))    # None (no KeyError)
print(person.get("email", "N/A"))  # "N/A" (with default)

# Modifying
person["email"] = "alice@example.com"  # Add/update
del person["city"]                      # Delete
age = person.pop("age")                # Remove and return

# Dictionary methods
print(person.keys())     # dict_keys(['name', 'email'])
print(person.values())   # dict_values(['Alice', 'alice@example.com'])
print(person.items())    # dict_items([('name', 'Alice'), ('email', '...')])

# Merging dictionaries
defaults = {"color": "blue", "size": "medium", "count": 1}
overrides = {"color": "red", "count": 5}

# Python 3.9+ merge operator
merged = defaults | overrides  # {'color': 'red', 'size': 'medium', 'count': 5}

# Unpacking merge (works in Python 3.5+)
merged = {**defaults, **overrides}

# setdefault - get value or set and return default
cache = {}
cache.setdefault("key", []).append("value1")
cache.setdefault("key", []).append("value2")
print(cache)  # {'key': ['value1', 'value2']}

# defaultdict for automatic defaults
from collections import defaultdict

word_count = defaultdict(int)
for word in "the cat sat on the mat".split():
    word_count[word] += 1
print(dict(word_count))  # {'the': 2, 'cat': 1, 'sat': 1, 'on': 1, 'mat': 1}

Cuando usar cada coleccion

  • Lista: Elementos ordenados que necesitas modificar, acceder por indice o iterar en orden
  • Tupla: Colecciones fijas, valores de retorno de funciones, claves de diccionario o cuando se desea inmutabilidad
  • Conjunto: Elementos unicos, pruebas de pertenencia u operaciones matematicas de conjuntos
  • Diccionario: Mapeos clave-valor, busquedas por clave, cache o conteo

Continuar Aprendiendo