Este artículo le enseñará cómo ordenar una lista en Python.

En Python, puede utilizar el método sort( ) para ordenar una lista en su lugar. O puede utilizar la función incorporada sorted () para obtener una copia ordenada de la lista.

En este tutorial, aprenderá:

  • Sintaxis del método sort( ) y de la función sorted( )
  • Ejemplos de código de ordenación de listas en orden ascendente y descendente
  • Personalizar la ordenación utilizando el parámetro clave
  • Diferencia entre sort( ) y sorted( )

Empecemos!👩🏽‍💻

Sintaxis del método sort() de Python

El método sort () actúa sobre una lista Python. Y ordena la lista en su lugar, modificando la lista original.

La sintaxis del método sort( ) de Python es

<lista>.ordenar(inverso = Verdadero | Falso, clave = <función>)

Analicemos ahora la sintaxis anterior.

  • <lista> es cualquier objeto lista válido de Python.
  • reverse es un parámetro opcional que toma True o False.
  • El valor por defecto de reverse es False, y la lista se ordena en orden ascendente. Dé True para ordenar la lista en orden descendente.
  • clave es también un parámetro opcional que se establece en <func>.
  • <func> puede ser una función incorporada o una función definida por el usuario.

En la siguiente sección, comenzará a codificar ejemplos sencillos.

Cómo ordenar una lista en Python en orden ascendente

Considere la lista nums. Para ordenar la lista en orden ascendente, puede llamar al método sort() sobre la lista.

▶ Ejecute el siguiente fragmento de código.

nums = [25,13,6,17,9]
nums.sort()
print(nums)

# Salida: [6, 9, 13, 17, 25]

La lista nums ha sido ordenada en orden ascendente, y la lista original ha sido modificada. Esto se denomina ordenación en el lugar.

Cómo ordenar la lista en Python en orden descendente

Para ordenar la lista en orden descendente, establezca inverso en True, como se muestra a continuación.

nums = [25,13,6,17,9]
nums.sort(inversa = True)
print(números)

# Salida: [25, 17, 13, 9, 6]

Puede ver que ahora la lista está ordenada en orden descendente.

Cómo utilizar key con el método sort() de Python

En esta sección, vamos a utilizar el parámetro clave y personalizar la ordenación.

Aquí, mod5 () es una función que toma un número x, y devuelve el resto cuando el número x se divide por 5.

def mod5(x):
  return x % 5 

Y nos gustaría utilizar la función anterior como clave.

Ahora, ejecute la siguiente celda de código.

nums = [25,13,6,17,9]
nums.sort(clave = mod5)
print(nums)

# Salida: [25, 6, 17, 13, 9]

Tómese un minuto para analizar la salida.

Observe cómo en lugar de la ordenación normal, ahora está personalizando su ordenación según la clave que es mod5.

  • El número que deja el resto mínimo al dividirlo por 5 va ahora primero.
  • Y el número que deja el resto mayor al dividirlo por 5 es el último elemento de la lista ordenada.

Para comprobar que esto es así, ejecute el siguiente fragmento de código.

números = [25,13,6,17,9]

para num en nums:
  print(f"{num} deja un resto {num%5} al dividirlo por 5")

# Salida
25 deja resto 0 al dividir por 5
13 sale resto 3 al dividir por 5
6 hojas resto 1 al dividir por 5
17 hojas resto 2 al dividir por 5
9 hojas resto 4 al dividir por 5

5 divide exactamente a 25, y el resto es 0. Así que ése es el primer elemento de la lista ordenada. 6 deja un resto 1, por lo que es el segundo elemento, y así sucesivamente. 9 deja un resto 4 al dividirlo por 5, y es el último elemento de la lista ordenada.

En lugar de definir una función por separado, puede utilizar funciones lambda. En Python, las lambdas son funciones anónimas de una línea. lambda args : expression devuelve la expresión calculada sobre los args.

Ahora, reescribamos la ordenación anterior utilizando la expresión lambda, como se muestra a continuación.

nums = [25,13,6,17,9]
nums.sort(clave = lambda x:x%5)
print(nums)

# Salida: [25, 6, 17, 13, 9]

Hasta ahora, ha aprendido a ordenar una lista de números. A continuación, veamos cómo puede ordenar una lista de cadenas en Python.

Cómo ordenar una lista en Python en orden alfabético

En esta sección, aprenderá a ordenar una lista de cadenas-con ejemplos inspirados en Harry Potter. ✨

python-sort-list

En nuestro ejemplo, students es una lista de alumnos de Hogwarts. Y nos gustaría ordenarlos por orden alfabético de sus nombres.

Al ordenar una lista de cadenas, la ordenación por defecto es en orden alfabético.

alumnos = ["Harry", "Ron", "Hermione", "Draco", "Cedric"]

Imprimamos la lista ordenada para comprobar el resultado de la ordenación.

estudiantes.ordenar()
print(estudiantes)

# Salida
['Cedric','Draco', 'Harry', 'Hermione', 'Ron']

Cómo ordenar la lista en Python en orden alfabético inverso

Para ordenar la lista en orden alfabético inverso, establezca reverse = True, como se muestra en el fragmento de código siguiente.

estudiantes.ordenar(inverso = True)
print(estudiantes)

# Salida
['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']

En la salida puede ver que, efectivamente, la lista se ha ordenado en orden inverso.

Cómo utilizar el parámetro clave Personalizar ordenación

En esta sección, vamos a personalizar la ordenación utilizando el parámetro clave opcional.

Considere la siguiente lista, casas.

casas = [
            {1: "Draco", "casa": "Slytherin"},
            {2: "Harry", "casa": "Gryffindor"},
            {3: "Cedric", "casa": "Hufflepuff"}
         ]

Aquí, las casas son una lista de diccionarios. Cada diccionario contiene dos pares clave-valor, uno denota los nombres de los alumnos y el otro la casa a la que pertenecen.

Ahora, nos gustaría ordenar esta lista houses en el orden alfabético de las casas a las que pertenecen.

Como ya habrá adivinado, debemos establecer el parámetro clave en la casa de los alumnos concretos.

Para recuperar la casa de cada alumno, puede definir una función returnHouse (), como se muestra a continuación.

def devolverCasa(alumno):
  return estudiante['casa']

Esta función devuelve la casa a la que pertenece el alumno en cuestión.

Ahora, puede llamar al método sort () sobre la lista de casas, como se muestra.

casas.ordenar(clave=devolverCasa)

En la salida que se muestra a continuación, observe cómo la lista se ordena por la casa y no por los nombres de los alumnos. Por eso tenemos Gryffindor, Hufflepuff y Slytherin, en orden alfabético.

print(casas)

# Salida
{2: 'Harry', 'casa': 'Gryffindor'}, 
{3: 'Cedric', 'casa': 'Hufflepuff'}, 
{1: 'Draco', 'casa': 'Slytherin'}]

Para definir el parámetro clave en consecuencia, también podría utilizar una función lambda. Para cada elemento de la lista, esta función devuelve la casa para ese elemento de la lista.

▶ Ejecute la siguiente celda de código para comprobarlo.

casas.ordenar(clave=lambda alumno:alumno["casa"])
print(casas)

# Salida
{2: 'Harry', 'casa': 'Gryffindor'}, 
{3: 'Cedric', 'casa': 'Hufflepuff'}, 
{1: 'Draco', 'casa': 'Slytherin'}]

En todos los ejemplos hasta ahora, ha utilizado el método sort( ) en una lista. Y ahora sabe que modifica la lista original.

¿Qué ocurre si desea conservar la lista original tal como está pero obtener una copia ordenada de la lista?

Pues bien, en Python, puede utilizar la función sorted () para hacerlo.

Sintaxis de la función sorted() de Python

La función sorted () toma como argumento una lista o cualquier colección. Y devuelve una copia ordenada de la lista, sin modificar la lista original.

La sintaxis de la función sorted( ) de Python es:

<copia_ordenada> = ordenada(<lista>, inverso = Verdadero | Falso, clave = <función>)

Observe cómo la sintaxis es muy similar a la del método sort ( ) que vimos anteriormente.

  • <lista> es cualquier objeto de lista válido de Python y es un parámetro obligatorio.
  • reverse y key son parámetros opcionales

Nota: A diferencia del método sort () que sólo actúa sobre listas, la función sorted() puede utilizarse para ordenar cualquier iterable de Python, como listas, cadenas y diccionarios.

Cómo ordenar listas en Python utilizando la función sorted()

#1. En este ejemplo, nums es una lista de números.

Puede llamar a la función sorted( ) con nums como argumento. Y asignarlo a la lista nums_ordenados1.

nums = [25,13,6,17,9]
sorted_nums1 = sorted(nums)
print(nums_ordenados1)

# Salida: [6, 9, 13, 17, 25]

En la salida anterior, puede ver que nums se ha ordenado por defecto en orden ascendente.

Además, observe que la lista original nums no se modifica, ya que sorted () devuelve una lista nueva. Esto se comprueba a continuación.

print(nums)
 # Salida: [25, 13, 6, 17, 9]

#2. Ahora, establezca el parámetro opcional reverse en True y obtenga sorted_nums2.

Como se muestra en la celda de código siguiente, sorted_nums2 es una nueva lista con los elementos ordenados de forma descendente.

sorted_nums2 = sorted(nums,reverse = True)
print(ordenados_numeros2)

# Salida: [25, 17, 13, 9, 6]

#3. En este ejemplo, vamos a trabajar con una lista de cadenas.

Como en los ejemplos anteriores, al llamar a la función sorted( ) se obtiene una nueva lista. Y los elementos se ordenan por orden alfabético.

frutas = ['peras','fresas','manzanas','piñas','arándanos']
sorted_fr1 = sorted(frutas)
print(sorted_fr1)

# Salida:
['manzana', 'arándano', 'pera', 'piña', 'fresa']

#4. Ahora, personalicemos la ordenación utilizando el parámetro opcional key. Establezca la clave como len. Esto ordenará la lista basándose en la longitud de las cadenas.

Nota: En Python, la función incorporada len( ) admite cualquier iterable, como listas, cadenas, tuplas, etcétera. Y devuelve la longitud del iterable.

La cadena con la longitud más corta aparece primero en la lista ordenada, y la cadena más larga aparece al final de la lista ordenada.

frutas = ['pera','fresa','manzana','piña','arándano']
sorted_fr2 = sorted(frutas,clave=len)
print(sorted_fr2)

# Salida:
['pera', 'manzana', 'piña', 'arándano', 'fresa']

En la salida anterior, pera es la cadena más corta y fresa la más larga.

También puede leer cómo invertir una lista en Python para hacerla girar hacia atrás.

Método sort() de Python frente a la función sorted()

Hasta ahora, ha aprendido a utilizar el método sort () así como la función sorted ( ). En esta sección, vamos a enumerar las diferencias entre estos dos métodos.

Método .sort() de PythonFunción sorted() de Python
Ordena la lista en su lugar-modifica la lista originalDevuelve una nueva lista ordenada
Funciona sólo con listas de PythonFunciona con iterables de Python como listas, cadenas y otras colecciones
Tiene como tipo de retorno NoneDevuelve una copia ordenada del iterable

Resumiendo 👩‍🏫

Espero que este tutorial sobre listas de Python le haya resultado útil.

Resumamos rápidamente lo que hemos cubierto.

  • Utilice list.sort(reverse = True | False, key = ) con los parámetros opcionales reverse y key para ordenar una lista en su lugar.
  • Utilice sorted(list, reverse = True | False, key = ) para obtener una copia ordenada de la lista.

Ahora que ha aprendido a ordenar listas en Python, aprenda sobre la comprensión de listas en Python. O también podría aprender cómo manejar archivos o trabajar con archivos JSON en Python.

Puede probar los ejemplos dados anteriormente en el compilador de Python en línea de Geekflare.