HOWTO · Python

Orden lexicográfico en Python

Este tutorial demuestra qué es el orden lexicográfico en Python.

En esta página

En Python, el orden lexicográfico compara las cadenas de izquierda a derecha según sus puntos de código Unicode. El primer carácter distinto determina el orden y, si una cadena es prefijo de otra, va primero la más corta. Usa sort() para reordenar una lista en el mismo lugar, sorted() para obtener un resultado ordenado y una función clave cuando necesites otra regla de comparación.

Qué significa el orden lexicográfico en Python

El orden lexicográfico compara los elementos de izquierda a derecha. En la primera posición donde dos elementos difieren, va primero el que tiene el valor menor; si uno es prefijo del otro, va primero el más corto. Python compara las cadenas según sus puntos de código Unicode, por lo que distingue entre mayúsculas y minúsculas y el resultado puede diferir de las expectativas alfabéticas propias del idioma del lector. Para ordenar sin distinguir entre mayúsculas y minúsculas, elige una clave explícita, como str.casefold.

Ordenar cadenas y palabras lexicográficamente

Usa list.sort() para reordenar una lista en el mismo lugar. Devuelve None; usa sorted() cuando necesites una lista nueva y quieras conservar sin cambios el iterable original. Si no se especifica una clave, Python compara las cadenas carácter por carácter.

Ejecuta este ejemplo: los valores de muestra están en inglés, y el código y la salida se muestran en inglés.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

names = ["pear", "apple", "orange"]
names.sort()
print(names)
['apple', 'orange', 'pear']

El parámetro opcional key permite definir el valor que se usará para comparar. Por ejemplo, sorted(names, key=str.casefold) ordena sin distinguir entre mayúsculas y minúsculas. Esto no modifica las cadenas almacenadas.

Para ordenar las palabras de una oración, primero divídela en una lista. El ejemplo usa palabras en inglés; el código y la salida se muestran en inglés.

sentence = "pear apple orange"
words = sentence.split()
words.sort()
print(words)
['apple', 'orange', 'pear']

split() separa el texto por secuencias de espacios en blanco de forma predeterminada. Ordenar esas palabras produce una lista ordenada, pero no conserva la puntuación como elementos separados ni reconstruye la oración con sus espacios originales. Si esos detalles importan, tokeniza y da formato al texto según las reglas necesarias.

Ordenar los caracteres de una cadena

Las cadenas son inmutables, así que ordena sus caracteres con sorted() y une la lista resultante para crear otra cadena. El ejemplo ordena los caracteres de una palabra en inglés; el código y la salida se muestran en inglés:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

word = "delftstack"
ordered_word = "".join(sorted(word))
print(ordered_word)
acdefklstt

El resultado sigue el orden de los puntos de código, no una regla de ordenación alfabética adaptada a un idioma. Los caracteres repetidos se mantienen. Si la tarea requiere ignorar mayúsculas y minúsculas, pasa una clave a sorted(); si el resultado debe respetar las reglas de ordenación de un idioma concreto, usa una biblioteca de intercalación en lugar de suponer que el orden de los puntos de código coincide con ellas.

Ordenar números por su valor numérico, no lexicográficamente

Python compara los enteros por su valor numérico. Por eso, 2 va antes que 10; al convertir esos valores en cadenas, la comparación pasa a ser carácter por carácter y "10" va antes que "2".

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

numbers = [1, 4, 5, 3, 10, 16, 12]
original = numbers.copy()
numbers.sort()
new_numbers = sorted(original)
print(numbers)
print(new_numbers)
print(original)
[1, 3, 4, 5, 10, 12, 16]
[1, 3, 4, 5, 10, 12, 16]
[1, 4, 5, 3, 10, 16, 12]

Las dos llamadas de ordenación anteriores producen una lista en orden numérico ascendente. sort() modifica la lista, mientras que sorted() devuelve una lista independiente. Para ordenar cadenas numéricas por su valor, conviértelas en números dentro de la clave, por ejemplo con sorted(values, key=int), y conserva las cadenas originales si importa su formato.

Ordenar tuplas por un campo seleccionado

De forma predeterminada, las tuplas se ordenan lexicográficamente por sus campos: Python compara primero los primeros campos y pasa a los siguientes cuando los anteriores coinciden. Para usar un campo como criterio principal, pasa una función clave. itemgetter(1) selecciona el segundo campo (índice 1). Los nombres de muestra están en inglés; el código y la salida se muestran en inglés:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

from operator import itemgetter

produce = [(1, "pear"), (3, "orange"), (2, "banana")]
by_name = sorted(produce, key=itemgetter(1))
print(by_name)
[(2, 'banana'), (3, 'orange'), (1, 'pear')]

El campo seleccionado determina el criterio principal de ordenación y cada tupla completa permanece unida. Una función clave también puede devolver una tupla si necesitas varios criterios; por ejemplo, (record[1].casefold(), record[0]) ordena primero por un nombre sin distinguir entre mayúsculas y minúsculas y después por un identificador. Usa sort() para modificar la lista en el mismo lugar o sorted() cuando necesites conservar el orden original.