Cómo ordenar listas en Python

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

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

En este tutorial, aprenderá:

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

¡Comencemos! 👩🏽‍💻

Sintaxis del método Python sort()

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

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

<list>.sort(reverse = True | False, key = <func>)

Analicemos ahora la sintaxis anterior.

  • es cualquier objeto de lista de Python válido.
  • reverse es un parámetro opcional que toma True o False.
  • El valor predeterminado de reverse es False y la lista se ordena en orden ascendente. Da True para ordenar la lista en orden descendente.
  • key también es un parámetro opcional que se establece en .
  • puede ser una función integrada o una función definida por el usuario.

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

Cómo ordenar la lista de Python en orden ascendente

Considere los números de la lista. Para ordenar la lista en orden ascendente, puede llamar al método sort() en la lista.

▶ Ejecute el siguiente fragmento de código.

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

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

Los números de la lista se han ordenado en orden ascendente y la lista original se ha modificado. Esto se llama clasificación en el lugar.

Cómo ordenar la lista de Python en orden descendente

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

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

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

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

Cómo usar la clave con el método Python sort()

En esta sección, usemos el parámetro clave y personalicemos 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 usar la función anterior como clave.

Ahora, ejecute la siguiente celda de código.

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

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

Tómese un minuto para analizar la salida.

Observe cómo, en lugar de la clasificación normal, ahora está personalizando su clasificación de acuerdo con la clave que es mod5.

  • El número que deja el residuo mínimo al dividirlo por 5 ahora es el primero.
  • Y el número que deja el resto más grande cuando se divide por 5 es el último elemento en la lista ordenada.

Para verificar que este sea el caso, ejecute el siguiente fragmento de código.

nums = [25,13,6,17,9]

for num in nums:
  print(f"{num} leaves remainder {num%5} when divided by 5")

# Output
25 leaves remainder 0 when divided by 5
13 leaves remainder 3 when divided by 5
6 leaves remainder 1 when divided by 5
17 leaves remainder 2 when divided by 5
9 leaves remainder 4 when divided by 5

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

En lugar de definir una función separada, también podría usar funciones lambda. En Python, las lambdas son funciones anónimas de una línea. lambda args: expresión devuelve la expresión calculada en los argumentos.

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

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

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

Hasta ahora, has 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 la lista de Python en orden alfabético

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

En nuestro ejemplo, estudiantes es una lista de estudiantes de Hogwarts. Y nos gustaría clasificarlos en el orden alfabético de sus nombres.

Al clasificar una lista de cadenas, la clasificación predeterminada es alfabética.

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

Imprimamos la lista ordenada para verificar el resultado de la clasificación.

students.sort()
print(students)

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

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

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

students.sort(reverse = True)
print(students)

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

A partir de la salida, puede ver que la lista se ha ordenado en orden inverso.

Cómo usar la clave Parámetro Personalizar Ordenar

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

Considere la siguiente lista, casas.

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

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

Ahora, nos gustaría ordenar esta lista de casas 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 estudiantes en particular.

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

def returnHouse(student):
  return student['house']

Esta función devuelve la casa a la que pertenece el estudiante en particular.

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

houses.sort(key=returnHouse)

En el resultado a continuación, observe cómo la lista está ordenada por la casa y no por los nombres de los estudiantes. Por eso tenemos a Gryffindor, Hufflepuff y Slytherin, en orden alfabético.

print(houses)

# Output
[{2: 'Harry', 'house': 'Gryffindor'}, 
{3: 'Cedric', 'house': 'Hufflepuff'}, 
{1: 'Draco', 'house': 'Slytherin'}]

Para definir el parámetro clave en consecuencia, también podría usar 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 verificar esto.

houses.sort(key=lambda student:student["house"])
print(houses)

# Output
[{2: 'Harry', 'house': 'Gryffindor'}, 
{3: 'Cedric', 'house': 'Hufflepuff'}, 
{1: 'Draco', 'house': 'Slytherin'}]

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

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

Bueno, en Python, puedes usar la función sorted() para hacer esto.

Sintaxis de la función Python sorted()

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

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

<sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)

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

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

Nota: a diferencia del método sort() que actúa solo en las listas, la función sorted() se puede usar para ordenar cualquier iterable de Python, como listas, cadenas y diccionarios.

Cómo ordenar la lista de Python usando 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 asígnelo a la lista sorted_nums1.

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

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

En el resultado anterior, puede ver que los números se han ordenado en orden ascendente de forma predeterminada.

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

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

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

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

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

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

#3. En este ejemplo, trabajemos con una lista de cadenas.

Al igual que con los ejemplos anteriores, llamar a la función sorted() devuelve una nueva lista. Y los elementos se ordenan en orden alfabético.

fruits = ['pears','strawberry','apple','pineapple','blueberry']
sorted_fr1 = sorted(fruits)
print(sorted_fr1)

# Output:
['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']

#4. Ahora, personalicemos la ordenación usando el parámetro clave opcional. Establezca la clave en len. Esto ordenará la lista según la longitud de las cadenas.

Nota: En Python, la función integrada len() acepta cualquier iterable, como listas, cadenas, tuplas, etc. 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.

fruits = ['pear','strawberry','apple','pineapple','blueberry']
sorted_fr2 = sorted(fruits,key=len)
print(sorted_fr2)

# Output:
['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

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

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

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

Python .sort() MethodPython sorted() FunctionOrdena la lista en su lugar: modifica la lista originalDevuelve una nueva lista ordenadaFunciona solo con listas de PythonFunciona con iterables de Python como listas, cadenas y otras coleccionesTiene el tipo de retorno NingunoDevuelve una copia ordenada de la iterable

Resumiendo 👩‍🏫

Espero que hayas encontrado útil este tutorial de listas de Python.

Resumamos rápidamente lo que hemos cubierto.

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

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

Puede probar los ejemplos anteriores en el compilador de Python en línea kirukiru.es.