La función sorted () devuelve una lista ordenada de los elementos en un iterable.
La sorted()
función ordena los elementos de un iterable dado en un orden específico (ya sea ascendente o descendente ) y devuelve el iterable ordenado como una lista.
La sintaxis de la sorted()
función es:
ordenado (iterable, clave = Ninguno, reverso = Falso)
Parámetros para la función sorted ()
sorted()
puede tomar un máximo de tres parámetros:
- iterable : una secuencia (cadena, tupla, lista) o colección (conjunto, diccionario, conjunto congelado) o cualquier otro iterador.
- reverse (Opcional) : si
True
, la lista ordenada se invierte (o se ordena en orden descendente). PredeterminadoFalse
si no se proporciona. - clave (Opcional) : una función que sirve como clave para la comparación de clasificación. Por defecto es
None
.
Ejemplo 1: ordenar cadena, lista y tupla
# vowels list py_list = ('e', 'a', 'u', 'o', 'i') print(sorted(py_list)) # string py_string = 'Python' print(sorted(py_string)) # vowels tuple py_tuple = ('e', 'a', 'u', 'o', 'i') print(sorted(py_tuple))
Salida
('a', 'e', 'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , 'e', 'i', 'o', 'u')
Tenga en cuenta que en todos los casos se devuelve una lista ordenada.
Nota: Una lista también tiene el método sort () que funciona de la misma manera que sorted()
. La única diferencia es que el sort()
método no devuelve ningún valor y cambia la lista original.
Ejemplo 2: ordenar en orden descendente
La sorted()
función acepta un reverse
parámetro como argumento opcional.
La configuración reverse = True
ordena los iterables en orden descendente.
# set py_set = ('e', 'a', 'u', 'o', 'i') print(sorted(py_set, reverse=True)) # dictionary py_dict = ('e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5) print(sorted(py_dict, reverse=True)) # frozen set frozen_set = frozenset(('e', 'a', 'u', 'o', 'i')) print(sorted(frozen_set, reverse=True))
Salida
('u', 'o', 'i', 'e', 'a') ('u', 'o', 'i', 'e', 'a') ('u', 'o' , 'i', 'e', 'a')
Parámetro clave en la función sorted () de Python
Si desea su propia implementación para ordenar, sorted()
también acepta una key
función como parámetro opcional.
Según el valor devuelto de la función clave, puede ordenar el iterable dado.
ordenado (iterable, clave = len)
Aquí, len()
está la función incorporada de Python para contar la longitud de un objeto.
La lista se ordena según la longitud del elemento, desde el recuento más bajo hasta el más alto.
Ejemplo 3: ordenar la lista usando sorted () que tiene una función clave
# take the second element for sort def take_second(elem): return elem(1) # random list random = ((2, 2), (3, 4), (4, 1), (1, 3)) # sort list with key sorted_list = sorted(random, key=take_second) # print list print('Sorted list:', sorted_list)
Salida
Lista ordenada: ((4, 1), (2, 2), (1, 3), (3, 4))
Ejemplo 4: clasificación con varias claves
Supongamos que tenemos la siguiente lista:
# Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100, Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) )
Queremos ordenar la lista de tal manera que el estudiante con las calificaciones más altas esté al principio. En caso de que los estudiantes obtengan calificaciones iguales, deben clasificarse para que el participante más joven sea lo primero.
Podemos lograr este tipo de ordenación con múltiples claves devolviendo tupla en lugar de un número.
Se pueden comparar dos tuplas comparando sus elementos empezando por el primero. Si hay un empate (los elementos son iguales), se compara el segundo elemento, y así sucesivamente.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
Usemos esta lógica para construir nuestra lógica de clasificación.
# Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) def sorter(item): # Since highest marks first, least error = most marks error = 100 - item(1) age = item(2) return (error, age) sorted_list = sorted(participant_list, key=sorter) print(sorted_list)
Salida
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Dado que la función lógica de clasificación es pequeña y cabe en una línea, la lambda
función se usa dentro en key
lugar de pasar un nombre de función separado.
El programa anterior se puede escribir usando la lambda
función de la siguiente manera:
# Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) sorted_list = sorted(participant_list, key=lambda item: (100-item(1), item(2))) print(sorted_list)
Salida
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Para obtener más información sobre las funciones lambda, visite Python Lambda Functions.