HOWTO · Python
Ordenar un conjunto en Python
Este tutorial demuestra cómo ordenar un conjunto de valores usando Python
En esta página
Un conjunto de Python almacena valores únicos, pero no los mantiene ordenados. Para obtener los valores en orden, pasa el conjunto a sorted(): devuelve una lista nueva y deja el conjunto sin cambios. Usa list.sort() cuando ya tengas una lista y quieras reordenarla en el mismo lugar; un conjunto no tiene un método sort().
Utiliza la función sorted() para ordenar un conjunto en Python
sorted() acepta un iterable y devuelve una lista. Si los valores se pueden comparar entre sí, el orden predeterminado es ascendente. El conjunto original sigue disponible y sin cambios, así que puedes volver a usarlo más adelante. El orden en que se muestra o se recorre un conjunto no garantiza que esté ordenado; aplica una ordenación explícita siempre que el orden importe.
Para un conjunto pequeño de números enteros, sorted() devuelve una lista nueva en orden ascendente. Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
values = {5, 3, 1, 4, 2}
ascending = sorted(values)
descending = sorted(values, reverse=True)
words = {"pear", "fig", "watermelon"}
by_length = sorted(words, key=len)
print(ascending)
print(descending)
print(by_length)
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]
['fig', 'pear', 'watermelon']
El parámetro reverse con el valor True invierte el orden de comparación. El parámetro key recibe una función que produce un valor de comparación para cada elemento; en este caso, len ordena las palabras por su longitud. Si varios elementos tienen la misma clave, su orden relativo sigue el orden de iteración del iterable de entrada, que no está garantizado en un conjunto. Si el orden en los empates importa, define una clave que incluya un criterio de desempate determinista, como una tupla con la longitud y la palabra.
Los valores deben poder ordenarse entre sí con la comparación predeterminada, o la función key debe devolver valores comparables entre sí. Por ejemplo, un conjunto puede contener tanto números enteros como cadenas, pero Python 3 no permite ordenar directamente esos tipos mezclados. Cuando sea adecuado para la tarea, elige una clave que los convierta a una forma comparable coherente. Para objetos personalizados, usa una clave que extraiga el atributo que quieras comparar, siempre que los valores de ese atributo puedan ordenarse.
Utiliza el método sort() para ordenar los valores de un conjunto en Python
list.sort() es un método de las listas, no de los conjuntos. Para usarlo con valores procedentes de un conjunto, primero conviértelo en una lista con list(values) y luego llama a sort() en esa lista. El método modifica la lista en el mismo lugar y devuelve None; no asignes ese valor de retorno a la lista. Ordenar la lista convertida no afecta al conjunto original.
Usa los parámetros key y reverse con list.sort() del mismo modo que con sorted(). Por ejemplo, items.sort(key=len, reverse=True) ordena una lista de cadenas de la más larga a la más corta. El método de lista resulta útil cuando necesitas actualizar una lista que ya tienes. Si solo necesitas un resultado ordenado y quieres conservar intacto el iterable de entrada, sorted() suele ser más sencillo.
Convertir el resultado de nuevo en un conjunto con set(ordered) conserva los valores únicos, pero no mantiene el orden de clasificación. Un conjunto no garantiza ningún orden, así que no dependas del orden en que se muestra o se recorre después de la conversión. Conserva la lista ordenada para cualquier operación posterior que dependa de una secuencia, como acceder a elementos por índice, mostrar los valores de manera coherente o procesarlos en orden.
Conclusión
Usa sorted(my_set) para obtener una lista nueva en orden ascendente; añade reverse=True para invertir el orden o key=... para usar un criterio personalizado. Usa list(my_set) seguido de list.sort() cuando quieras ordenar una lista en el mismo lugar. Ni mostrar un conjunto ni convertir una lista ordenada de nuevo en un conjunto conserva el orden de clasificación; usa una lista siempre que el orden importe.