Cómo ordenar listas en Python
Publicado: 2022-03-30Este 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ónsorted()
- Ejemplos de código de clasificación de listas en orden ascendente y descendente
- Personalice la ordenación usando el parámetro
key
- Diferencia entre
sort()
ysorted()
¡Empecemos!
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.
-
<list>
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
esFalse
y la lista se ordena en orden ascendente. DaTrue
para ordenar la lista en orden descendente. -
key
también es un parámetro opcional que se establece en<func>
. -
<func>
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 la lista nums
. 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 nums
de la lista se han ordenado en orden ascendente y la lista original se ha modificado. Esto se denomina clasificación en el lugar .
Cómo ordenar la lista de Python en orden descendente
Para ordenar la lista en orden descendente, establezca reverse
en True
, 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 key
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 key
.
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 key
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, students
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 key
opcional.
Considere la siguiente lista, houses
.
houses = [ {1:"Draco","house":"Slytherin"}, {2:"Harry","house":"Gryffindor"}, {3:"Cedric","house":"Hufflepuff"} ]
Aquí, houses
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 key
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 key
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.
-
<list>
es cualquier objeto de lista de Python válido y es un parámetro obligatorio . -
reverse
ykey
son parámetros opcionales
Nota : a diferencia del método
sort()
que actúa solo en las listas, la funciónsorted()
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 nums
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 key
opcional. Establezca la key
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.
Método Python .sort() | Función Python ordenada () |
Ordena la lista en su lugar: modifica la lista original | Devuelve una nueva lista ordenada |
Funciona solo con listas de Python | Funciona con iterables de Python, como listas, cadenas y otras colecciones. |
Tiene tipo de retorno de None | Devuelve una copia ordenada del 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 = <func>) con los parámetros reverse y key opcionales para ordenar una lista en su lugar.
- Use sorted(list, reverse = True | False, key = <func>) 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 dados anteriormente en Geekflare Online Python Compiler.