En este artículo, aprenderá a usar el método de lista sort() de Python.

También aprenderá una forma diferente de ordenar en Python utilizando la función sorted() para que pueda ver en qué se diferencia de sort().

Al final, conocerá los conceptos básicos para clasificar una lista en Python y sabrá cómo personalizar el algoritmo de ordenamiento para que se ajuste a sus necesidades.

El método sort(): una descripción general de la sintaxis

El método sort() es una de las formas en que puede ordenar una lista en Python.

Cuando usa sort(), ordena una lista en el lugar. Esto significa que la lista original se modifica directamente. Específicamente, se altera el orden original de los elementos.

La sintaxis general para el método sort() se ve así:

list_name.sort(reverse=..., key=... )
  • list_name es el nombre de la lista con la que está trabajando.
  • sort() es uno de los métodos de lista de Python para ordenar y cambiar una lista. Ordena los elementos de la lista en orden ascendente o descendente.
  • sort() acepta dos parámetros opcionales.
  • reverse es el primer parámetro opcional. Especifica si la lista se ordenará en orden ascendente o descendente. Toma un valor booleano, lo que significa que el valor es verdadero o falso. El valor predeterminado es Falso, lo que significa que la lista se ordena en orden ascendente. Configurándolo en True ordena la lista hacia atrás, en orden descendente.
  • key es el segundo parámetro opcional. Se necesita una función o método que se utiliza para especificar cualquier criterio de clasificación detallado que pueda tener.

Si el método sort() devuelve None significa que no hay valor de retorno ya que solo modifica la lista original. No devuelve una nueva lista.

Cómo ordenar los elementos de la lista en orden ascendente usando el método sort()

Como se mencionó anteriormente, por defecto sort() ordena los elementos de la lista en orden ascendente.

El orden ascendente (o creciente) significa que los artículos están ordenados de menor a mayor valor.

El valor más bajo está en el lado izquierdo y el valor más alto está en el lado derecho.

La sintaxis general para hacer esto sería algo similar a lo siguiente:

list_name.sort()

Echemos un vistazo al siguiente ejemplo que muestra cómo ordenar una lista de números enteros:

# una lista de números
numeros = [10, 8, 3, 22, 33, 7, 11, 100, 54]

#ordenar la lista en orden ascendente
numeros.sort()

# imprimir la lista modificada
print(numeros)

#salida

#[3, 7, 8, 10, 11, 22, 33, 54, 100]

En el ejemplo anterior, los números se ordenan de menor a mayor.

También puede lograr lo mismo cuando trabaja con una lista de cadenas:

# una lista de strings
lenguajes = ["Python", "Swift","Java", "C++", "Go", "Rust"]

#ordenar en orden alfabetico
lenguajes.sort()

#imprimir la lista modificada
print(lenguajes)

#salida

#['C++', 'Go', 'Java', 'Python', 'Rust', 'Swift']

En este caso, cada cadena contenida en la lista se ordenó en orden alfabético.

Como viste en ambos ejemplos, las listas originales se cambiaron directamente.

Cómo ordenar los elementos de la lista en orden descendente usando el método sort()

El orden descendente (o decreciente) es lo opuesto al orden ascendente: los elementos se ordenan de mayor a menor valor.

Para ordenar los elementos de la lista en orden descendente, debe usar el parámetro inverso opcional con el método sort() y establecer su valor en True.

La sintaxis general para hacer esto se vería así:

list_name.sort(reverse=True)

Reutilicemos el mismo ejemplo de la sección anterior, pero esta vez haga que los números estén ordenados en orden inverso:

# lista de numeros
numeros = [10, 8, 3, 22, 33, 7, 11, 100, 54]

#ordenar la lista en orden descendente
numeros.sort(reverse=True)

#imprimir la lista
print(numeros)

#salida

#[100, 54, 33, 22, 11, 10, 8, 7, 3]

Ahora todos los números están ordenados al revés, con el valor más grande en el lado izquierdo y el más pequeño en el lado derecho.

También puede lograr lo mismo cuando trabaja con una lista de cadenas.

# una lista de strings
lenguajes = ["Python", "Swift","Java", "C++", "Go", "Rust"]

#ordenar la lista en orden alfabetico descendente
lenguajes.sort(reverse=True)

#imprimir la lista
print(lenguajes)

#salida

#['Swift', 'Rust', 'Python', 'Java', 'Go', 'C++']

Los elementos de la lista ahora están dispuestos en orden alfabético inverso.

Cómo ordenar los elementos de la lista usando el parámetro clave con el método sort()

Puede utilizar el parámetro clave para realizar operaciones de clasificación más personalizadas.

El valor asignado al parámetro clave debe ser algo invocable.

Callable es algo que se puede llamar, lo que significa que se puede invocar y hacer referencia.

Algunos ejemplos de objetos invocables son métodos y funciones.

Este método o función asignada a key se aplicará a todos los elementos de la lista antes de que se produzca la clasificación y especificará la lógica de los criterios de clasificación.

Digamos que desea ordenar una lista de cadenas en función de su longitud.

Para eso, asigna la función len() incorporada al parámetro clave.

La función len() contará la longitud de cada elemento almacenado en la lista contando los caracteres contenidos en ese elemento.

lenguajes = ["Python", "Swift","Java", "C++", "Go", "Rust"]

lenguajes.sort(key=len)

print(lenguajes)

#salida

#['Go', 'C++', 'Java', 'Rust', 'Swift', 'Python']

En el ejemplo anterior, las cadenas se clasifican en el orden ascendente predeterminado, pero esta vez la clasificación se realiza en función de su longitud.

La cuerda más corta está en el lado izquierdo y la más larga en el derecho.

Los parámetros clave e inverso también se pueden combinar.

Por ejemplo, puede ordenar los elementos de la lista en función de su longitud, pero en orden descendente.

lenguajes = ["Python", "Swift","Java", "C++", "Go", "Rust"]

lenguajes.sort(key=len, reverse=True)

print(lenguajes)

#salida

#['Python', 'Swift', 'Java', 'Rust', 'C++', 'Go']

En el ejemplo anterior, las cadenas van de la más larga a la más corta.

Otra cosa a tener en cuenta es que puede crear una función de clasificación personalizada propia para crear criterios de clasificación más explícitos.

Por ejemplo, puede crear una función específica y luego ordenar la lista según el valor de retorno de esa función.

Digamos que tiene una lista de diccionarios con lenguajes de programación y el año en que se creó cada lenguaje de programación.

lenguajes = [{'lenguaje':'Python','año':1991},
{'lenguaje':'Swift','año':2014},
{'lenguaje':'Java', 'año':1995},
{'lenguaje':'C++','año':1985},
{'lenguaje':'Go','año':2007},
{'lenguaje':'Rust','año':2010},
]

Puede definir una función personalizada que obtenga el valor de una clave específica del diccionario.

? ¡Tenga en cuenta que una clave de diccionario y el parámetro clave que acepta sort() son dos cosas diferentes!

Específicamente, la función obtendrá y devolverá el valor de la clave del año en la lista de diccionarios, que especifica el año en que se crearon todos los idiomas del diccionario.

El valor de retorno se aplicará como criterio de clasificación para la lista.

lenguajes = [{'lenguaje':'Python','año':1991},
{'lenguaje':'Swift','año':2014},
{'lenguaje':'Java', 'año':1995},
{'lenguaje':'C++','año':1985},
{'lenguaje':'Go','año':2007},
{'lenguaje':'Rust','año':2010},
]

def get_year(element):
    return element['año']

A continuación, puede ordenar según el valor de retorno de la función que creó anteriormente asignándola al parámetro clave y ordenar según el orden cronológico ascendente predeterminado:

lenguajes = [{'lenguaje':'Python','año':1991},
{'lenguaje':'Swift','año':2014},
{'lenguaje':'Java', 'año':1995},
{'lenguaje':'C++','año':1985},
{'lenguaje':'Go','año':2007},
{'lenguaje':'Rust','año':2010},
]

def get_year(element):
    return element['año']

lenguajes.sort(key=get_year)

print(lenguajes)

#salida
[
   {'lenguaje': 'C++', 'año': 1985}, 
   {'lenguaje': 'Python', 'año': 1991}, 
   {'lenguaje': 'Java', 'año': 1995}, 
   {'lenguaje': 'Go', 'año': 2007}, 
   {'lenguaje': 'Rust', 'año': 2010}, 
   {'lenguaje': 'Swift', 'año': 2014}
]

Si desea ordenar desde el lenguaje creado más recientemente hasta el más antiguo, o en orden descendente, utilice el parámetro reverse=True:

lenguajes.sort(key=get_year, reverse=True)

print(lenguajes)

#salida
[
    {'lenguaje': 'Swift', 'año': 2014}, 
    {'lenguaje': 'Rust', 'año': 2010}, 
    {'lenguaje': 'Go', 'año': 2007}, 
    {'lenguaje': 'Java', 'año': 1995}, 
    {'lenguaje': 'Python', 'año': 1991}, 
    {'lenguaje': 'C++', 'año': 1985}
]

Para lograr exactamente el mismo resultado, puede crear una función lambda.

En lugar de usar la función personalizada normal que definió con la palabra clave def, puede:

crear una expresión concisa de una línea y no definir un nombre de función como lo hizo con la función def. Las funciones lambda también se denominan funciones anónimas.

lenguajes = [{'lenguaje':'Python','año':1991},
{'lenguaje':'Swift','año':2014},
{'lenguaje':'Java', 'año':1995},
{'langlenguajeuage':'C++','año':1985},
{'lenguaje':'Go','año':2007},
{'lenguaje':'Rust','año':2010},
]

lenguajes.sort(key=lambda element: element['año'])

print(lenguajes)

La función lambda que se especifica con la línea key=lambda element: element[‘year’] ordena estos lenguajes de programación del más antiguo al más reciente.

Las diferencias entre sort() y sorted()

El método sort() funciona de manera similar a la función sorted().

La sintaxis general de la función sorted() se ve así:

sorted(list_name,reverse=...,key=...)
  • sorted() es una función integrada que acepta un iterable. Luego lo ordena en orden ascendente o descendente.
  • sorted() acepta tres parámetros. Un parámetro es obligatorio y los otros dos son opcionales.
  • list_name es el parámetro requerido. En este caso, el parámetro es list, pero sorted() acepta cualquier otro objeto iterable.
  • sorted() también acepta los parámetros opcionales reverse y key, que son los mismos parámetros opcionales que acepta el método sort().

La principal diferencia entre sort() y sorted() es que la función sorted() toma una lista y devuelve una nueva copia ordenada.

La nueva copia contiene los elementos de la lista original en un orden ordenado.

Los elementos de la lista original no se ven afectados y permanecen sin cambios.

Entonces, para resumir las diferencias:

El método sort() no tiene valor de retorno y modifica directamente la lista original, cambiando el orden de los elementos contenidos en ella.
Por otro lado, la función sorted() tiene un valor de retorno, que es una copia ordenada de la lista original. Esa copia contiene los elementos de la lista de la lista original en orden ordenado. Por último, la lista original permanece intacta.

Echemos un vistazo al siguiente ejemplo para ver cómo funciona:

#lista original de numeros
numeros = [10, 8, 3, 22, 33, 7, 11, 100, 54]

#ordenar la lista original
numeros_ordenados = sorted(numeros)

#imprimir la lista original
print(numeros)

#print the copy of the original list that was created
print(numeros_ordenados)

#salida

#[10, 8, 3, 22, 33, 7, 11, 100, 54]
#[3, 7, 8, 10, 11, 22, 33, 54, 100]

Dado que no se proporcionaron argumentos adicionales a sorted(), ordenó la copia de la lista original en el orden ascendente predeterminado, desde el valor más pequeño hasta el más grande.

Y al imprimir la lista original ves que se ha quedado igual y los artículos tienen su orden original.

Como vio en el ejemplo anterior, la copia de la lista se asignó a una nueva variable, my_numbers_sorted.

Algo así no se puede hacer con sort().

Consulte el siguiente ejemplo para ver qué sucedería si se intentara con el método sort().

numeros = [10, 8, 3, 22, 33, 7, 11, 100, 54]

numeros_ordenados = my_numbers.sort()

print(numeros)
print(numeros_ordenados)

#salida

#[3, 7, 8, 10, 11, 22, 33, 54, 100]
#None

Verá que el valor de retorno de sort() es None.

Por último, otra cosa a tener en cuenta es que los parámetros inversos y clave que acepta la función sorted() funcionan exactamente de la misma manera que lo hacen con el método sort() que viste en las secciones anteriores.

Cuándo usar sort() y sorted()

A continuación se enumeran algunas cosas que quizás desee considerar al decidir si debe usar sort() o sorted().

Primero, considere el tipo de datos con los que está trabajando:

  • Si está trabajando estrictamente con una lista desde el principio, necesitará usar el método sort() ya que sort() solo se llama en las listas.
  • Por otro lado, si desea más flexibilidad y aún no está trabajando con una lista, puede usar sorted(). La función sorted() acepta y ordena cualquier iterable (como diccionarios, tuplas y conjuntos) y no solo listas.

A continuación, otra cosa a considerar es si es importante conservar el orden original de la lista con la que está trabajando:

  • Al llamar a sort(), la lista original se modificará y se perderá el orden original. No podrá recuperar las posiciones originales de los elementos de la lista. Utilice sort() cuando esté seguro de que desea cambiar la lista con la que está trabajando y de que no desea conservar el orden que tenía.
  • Por otro lado, sorted() es útil cuando desea crear una nueva lista pero aún desea conservar la lista con la que está trabajando. La función sorted() creará una nueva lista ordenada con los elementos de la lista ordenados en el orden deseado.

Por último, otra cosa que quizás desee considerar cuando trabaje con conjuntos de datos más grandes es la eficiencia del tiempo y la memoria:

El método sort () ocupa y consume menos memoria, ya que simplemente ordena la lista en el lugar y no crea una nueva lista innecesaria que no necesita. Por la misma razón, también es un poco más rápido ya que no crea una copia. Esto puede ser útil cuando trabaja con listas más grandes que contienen más elementos.

Conclusión

¡Y ahí lo tienes! Ahora sabe cómo ordenar una lista en Python usando el método sort().

También echó un vistazo a las diferencias clave entre ordenar una lista usando sort() y sorted().

Espero que hayas encontrado útil este artículo.

Categorized in: