Recorrer Sets
Aprende a recorrer sets en Python con bucles for y while, enumerate, break, continue y comprensiones de sets con ejemplos claros.
Los sets de Python son colecciones desordenadas de elementos únicos. Al ser desordenados, no puedes acceder a sus elementos por índice, pero puedes iterar sobre cada elemento con un bucle for, usar bucles while para consumir un set y aplicar operaciones de sets dentro de bucles para resolver problemas comunes con datos.
Esta página explica cómo recorrer sets en Python, incluyendo la iteración determinista con sorted(), enumerate(), el filtrado con break y continue, las comprensiones de sets y casos de uso prácticos.
Crear un Set
Antes de recorrerlo, necesitas un set. Puedes crear uno con llaves {} o con la función integrada set(). Consulta Python Sets para una introducción completa.
Crear un set en Python
# Using curly braces
fruits = {'apple', 'banana', 'cherry'}
# Using set() — useful when converting another sequence
numbers = set([1, 2, 2, 3, 4, 4, 5])
print(numbers) # {1, 2, 3, 4, 5} — duplicates are removedObserva que set() aplicado a una lista elimina automáticamente los duplicados. El orden de salida no está garantizado.
Recorrer un Set con un Bucle For
La forma más común de iterar sobre un set es con un bucle for. Python visita cada elemento una vez, pero en un orden arbitrario.
Iterar sobre un set en Python
Al ejecutarlo, la salida podría ser:
banana
cherry
appleEl orden puede variar cada vez que se ejecuta el programa. Si necesitas un orden predecible, envuelve el set en sorted().
Iterar en Orden Ascendente
sorted() devuelve una lista normal con los elementos del set en orden ascendente. El set original no se modifica.
Recorrer un set en orden ascendente
fruits = {'apple', 'banana', 'cherry'}
for fruit in sorted(fruits):
print(fruit)Salida:
apple
banana
cherryUsa sorted(my_set, reverse=True) para iterar en orden descendente.
Usar enumerate() con un Set
enumerate() empareja cada elemento con un contador. Combinado con sorted(), obtienes un índice estable junto a cada elemento.
Enumerar un set en Python
fruits = {'apple', 'banana', 'cherry'}
for index, fruit in enumerate(sorted(fruits)):
print(index, fruit)Salida:
0 apple
1 banana
2 cherryEsto es útil cuando necesitas numerar elementos en un informe o etiquetarlos en un pipeline de datos.
Recorrer con break y continue
Puedes usar break para detener el bucle antes de tiempo y continue para omitir elementos específicos.
Usar continue para Omitir Elementos
Omitir elementos al recorrer un set
scores = {55, 72, 88, 64}
for score in sorted(scores):
if score < 60:
continue # skip failing scores
print(score)Salida:
64
72
88Usar break para Detener Antes de Tiempo
Detener un bucle antes de tiempo con break
scores = {55, 72, 88, 91, 64}
for score in sorted(scores):
if score >= 90:
print(f'First score at 90 or above: {score}')
breakSalida:
First score at 90 or above: 91Recorrer un Set con un Bucle While
Un bucle while combinado con pop() te permite procesar y consumir un set elemento a elemento. Usa este patrón cuando quieras vaciar el set a medida que avanzas (por ejemplo, una cola de trabajo).
Usar un bucle while para consumir un set
tasks = {'send email', 'write report', 'update database'}
while tasks:
task = tasks.pop() # removes and returns an arbitrary element
print(f'Processing: {task}')
print('All tasks done.')Salida (el orden puede variar):
Processing: update database
Processing: write report
Processing: send email
All tasks done.Después del bucle, tasks queda vacío. Si necesitas conservar el set original, trabaja sobre una copia: tasks.copy().
Comprobación de Pertenencia Dentro de un Bucle
Una de las mayores fortalezas de los sets es la comprobación de pertenencia en O(1). Verificar item in my_set es mucho más rápido que item in my_list para colecciones grandes, porque los sets utilizan internamente una tabla hash.
Filtrar una lista usando un set para búsquedas rápidas
allowed_roles = {'admin', 'editor', 'viewer'}
users = ['admin', 'guest', 'editor', 'unknown']
for user in users:
if user in allowed_roles:
print(f'{user}: access granted')
else:
print(f'{user}: access denied')Salida:
admin: access granted
guest: access denied
editor: access granted
unknown: access deniedEste patrón es habitual para verificaciones de permisos, listas de bloqueo y filtrado de datos.
Eliminar Duplicados de una Lista
Convertir una lista en un set dentro de un bucle es una forma rápida de asegurarte de procesar cada valor único solo una vez.
Eliminar duplicados de una lista usando un set
my_list = [1, 2, 2, 3, 4, 4, 5]
unique_values = set(my_list) # duplicates removed
for value in sorted(unique_values):
print(value)Salida:
1
2
3
4
5Recorrer Operaciones de Sets
Puedes iterar directamente sobre el resultado de una operación de sets — unión, intersección, diferencia — sin crear una variable intermedia.
Recorrer operaciones de sets en Python
Salida:
Intersection:
3
4
Difference (set1 - set2):
1
2
Symmetric difference:
1
2
5
6Consulta Join Sets para más información sobre cómo combinar sets y Set Methods para la lista completa de operaciones.
Comprensiones de Sets
Una comprensión de set construye un nuevo set a partir de una expresión en una sola línea. La sintaxis es similar a las comprensiones de listas, pero usa llaves.
Construir un set con una comprensión de set
# Squares of numbers 1 through 5
squares = {x**2 for x in range(1, 6)}
print(sorted(squares))Salida:
[1, 4, 9, 16, 25]Puedes añadir una condición para filtrar elementos:
Comprensión de set con filtro
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
evens = {n for n in numbers if n % 2 == 0}
print(sorted(evens))Salida:
[2, 4, 6, 8, 10]Las comprensiones de sets son más concisas que un bucle for que llama a .add() en el cuerpo, y expresan la intención con claridad. Para equivalentes con listas, consulta List Comprehension.
Puntos Clave
- Los sets son desordenados — no dependas del orden de iteración. Usa
sorted()cuando necesites un orden estable. - Los sets contienen elementos únicos — la iteración omite automáticamente los duplicados.
- Las comprobaciones de pertenencia con
inen sets son O(1) — mucho más rápidas que en listas para grandes volúmenes de datos. pop()elimina un elemento arbitrario y es útil para consumir un set en un buclewhile.- Las comprensiones de sets
{expr for item in iterable}son la forma idiomática de construir un set filtrado o transformado en una sola línea.
Temas Relacionados
- Python Sets — crear, añadir y eliminar elementos
- Add Set Items — métodos
add()yupdate() - Remove Set Items —
remove(),discard()ypop() - Join Sets — unión, intersección, diferencia y más
- Set Methods — referencia completa de todos los métodos de sets
- Python For Loops — el bucle
foren profundidad - Loop Lists — iterar sobre listas
- Loop Tuples — iterar sobre tuplas
- Loop Dictionaries — iterar sobre diccionarios