Elige la estructura que se ajusta a cada necesidad: tuplas inmutables, conjuntos para pruebas de pertenencia en O(1), Counter y defaultdict para los patrones recurrentes.
Abrir esta lección en KodokonElegir la estructura de datos adecuada resuelve de una sola vez la legibilidad y el rendimiento. La tupla es una secuencia inmutable: ideal para un registro heterogéneo de tamaño fijo (coordenadas, un par clave-valor). Inmutable implica hashable (si su contenido lo es): una tupla puede por tanto servir de clave de diccionario o de elemento de un conjunto, cosa que una lista no puede. El desempaquetado hace que el código sea expresivo - y una función que "devuelve varios valores" en realidad devuelve una tupla.
point = (48.85, 2.35)
lat, lon = point
def min_max(values):
return min(values), max(values)
low, high = min_max([3, 1, 4, 1, 5])
print(low, high)
distances = {("paris", "lyon"): 465}
print(distances[("paris", "lyon")])El conjunto garantiza la unicidad y ofrece una prueba de pertenencia en O(1) en promedio, donde una lista es O(n). En un bucle que comprueba x in collection miles de veces, la diferencia se nota de inmediato. Los operadores de conjuntos (& intersección, - diferencia, | unión) son una auténtica mejora frente a los bucles anidados: comparar dos listas de identificadores - quién ha desaparecido, quién es nuevo - cabe en dos líneas.
active = {"ada", "linus", "guido"}
banned = {"linus", "mallory"}
print(active & banned)
print(active - banned)
print(active | banned)
emails = ["a@x.io", "b@x.io", "a@x.io"]
unique = set(emails)
print(len(unique))El módulo collections cubre dos necesidades cotidianas. Counter cuenta las apariciones en un iterable y expone most_common(n) - se acabaron los diccionarios de conteo escritos a mano. defaultdict(factory) construye sobre la marcha el valor que falta: defaultdict(list) es la herramienta canónica para agrupar elementos por clave sin comprobar la existencia de la clave en cada vuelta del bucle.
from collections import Counter, defaultdict
words = ["go", "py", "go", "rs", "go"]
counts = Counter(words)
print(counts.most_common(2))
groups = defaultdict(list)
pairs = [("fr", "Ada"), ("us", "Lin"), ("fr", "Zoe")]
for country, name in pairs:
groups[country].append(name)
print(dict(groups))