Ordenar datos es una de las tareas más comunes cuando se trabaja con Python. Por ejemplo, puede ordenar una lista de miembros del equipo por nombre o una lista de proyectos en orden de prioridad.

Este artículo describe cómo ordenar listas en Python .

piton  sort()ysorted()

En Python, puede ordenar una lista usando el list.sort()método integrado o la sorted()función integrada.

La sorted()función crea una nueva lista ordenada, mientras que el list.sort()método ordena la lista en su lugar. Si desea conservar la lista sin ordenar, utilice la sorted()función. Otra diferencia es que la sorted()función funciona en cualquier objeto iterable.

La sintaxis de sort()y sorted()es la siguiente:

list.sort(key=function, reverse=Boolean)
sorted(iterable, key=function, reverse=Boolean)

Los argumentos de palabra clave opcionales keyy reversetienen el siguiente significado:

  • key- Función que toma un argumento y lo transforma antes de la comparación. La función debe devolver un valor que se utiliza para la comparación de clasificación.
  • reverse- El valor de reverse puede ser Trueo False. El valor predeterminado es True. Cuando este argumento se establece en falso, la lista se ordena en orden inverso.

Los elementos de la lista se comparan utilizando el operador "menor que" ( <) y se ordenan en orden ascendente. El <operador no admite la comparación de una cadena con un número entero, por lo que si tiene una lista que contiene cadenas y números enteros, la operación de clasificación fallará.

El siguiente ejemplo muestra cómo ordenar una lista de cadenas en orden alfabético:

directions = ["north", "east", "south", "west"] 

directions.sort()

print('Sorted list:', directions)
Sorted list: ['east', 'north', 'south', 'west']

Si desea mantener la lista original sin cambios, use la sorted()función:

directions = ["north", "east", "south", "west"] 

sorted_directions = sorted(directions)

print('Sorted list:', sorted_directions)
Sorted list: ['east', 'north', 'south', 'west']

Para ordenar la lista en orden inverso (descendente), establezca el reverseargumento en True:

directions = ["north", "east", "south", "west"] 

directions.sort(reverse=True)

print('Sorted list:', directions)
Sorted list: ['west', 'south', 'north', 'east']

Clasificación con función

El keyargumento acepta una función y le permite realizar operaciones de clasificación más complejas.

El ejemplo más sencillo sería ordenar los elementos según su longitud:

directions = ["Arya", "Daenerys", "Jon", "Brienne"] 

directions.sort(key=len)

print('Sorted list:', directions)

Estamos usando la len()función para devolver la cantidad de caracteres en la cadena, que se usa como comparador:

Sorted list: ['Jon', 'Arya', 'Brienne', 'Daenerys']

También puede crear una función personalizada y usarla como keyargumento para la comparación. Aquí hay un ejemplo que muestra cómo ordenar una lista de números enteros según la suma de sus dígitos:


def sum_digits(num): 
    digits = [int(x) for x in str(num)] 
    return sum(digits) 

numbers = [23, 77, 19, 310, 219] 

numbers.sort(reverse=True, key=sum_digits)

print('Sorted list:', numbers)
Sorted list: [77, 219, 19, 23, 310]

Otro ejemplo sería usar el argumento clave para ordenar una lista compleja, como una lista de tuplas:

numbers = [(3, 14), (1, 61), (2, 71)]

numbers.sort(key=lambda k: k[0])

print('Sorted list:', numbers)

Estamos usando una función anónima (lambda) que devuelve el primer elemento de la tupla. La lista está ordenada por el valor devuelto por la función:

Sorted list: [(1, 61), (2, 71), (3, 14)]

El mismo enfoque se puede utilizar para ordenar una lista de diccionarios:

elements = [
    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},
    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},
    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},
]

elements.sort(key=lambda k: k['name'])

print('Sorted list:', elements)

La función lambda devuelve el valor de la nameclave, que se utiliza para la comparación:

Sorted list: [
    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}, 
    {'name': 'Iron', 'number': 26, 'symbol': 'fe'}, 
    {'name': 'Silver', 'number': 47, 'symbol': 'ag'}
]

Una forma mejor y más rápida de ordenar una función compleja es usar las funciones del módulo Operador . Aquí hay un ejemplo:

from operator import itemgetter

elements = [
    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},
    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},
    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},
]

elements.sort(key=itemgetter('symbol'))

print('Sorted list:', elements)

La itemgetterfunción obtiene el valor de la clave symbol:

Sorted list: [
    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},
    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},
    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}
]

Conclusión

Le mostramos cómo ordenar listas en Python usando el sort()método y la sorted()función.

Si tiene alguna pregunta o comentario, no dude en dejar un comentario.