Clasificación de listas de Python con sorted() y sort()

En este artículo, examinaremos varias formas de ordenar listas en Python. Python se envía con dos métodos integrados para ordenar listas y otros objetos iterables. Los...

En este artículo, examinaremos varias formas de ordenar listas en Python.

Python se envía con dos métodos integrados para ordenar listas y otros objetos iterables. El método elegido para un caso de uso particular a menudo depende de si queremos ordenar una lista en el lugar o devolver una nueva versión de la lista ordenada.

Suponiendo que queremos ordenar una lista en su lugar, podemos usar el método list.sort() de la siguiente manera:

1
2
3
4
>>> pets = ['Turtle', 'Cat', 'Fish', 'Dingo']
>>> pets.sort()
>>> pets
['Cat', 'Dingo', 'Fish', 'Turtle']

De forma predeterminada, la lista se ordena en orden ascendente. Observe cómo cambia la lista original de mascotas después de llamar al método de ordenación. Si no queremos que esto suceda, podemos usar la función integrada sorted() para devolver una nueva lista ordenada y dejar la lista original sin cambios:

1
2
3
4
5
6
>>> pets = ['Turtle', 'Cat', 'Fish', 'Dingo']
>>> new_pets = sorted(pets)
>>> new_pets
['Cat', 'Dingo', 'Fish', 'Turtle']
>>> pets
['Turtle', 'Cat', 'Fish', 'Dingo']

El argumento inverso se puede usar para ordenar listas en orden descendente:

1
2
3
4
5
6
7
>>> pets = ['Turtle', 'Cat', 'Fish', 'Dingo']
>>> new_pets = sorted(pets, reverse=True)
>>> new_pets
['Turtle', 'Fish', 'Dingo', 'Cat']
>>> pets.sort(reverse=True)
>>> pets
['Turtle', 'Fish', 'Dingo', 'Cat']

Sin embargo, hay escenarios en los que podríamos querer ordenar una lista según los criterios personalizados que definimos. Por ejemplo, podemos querer ordenar nuestra lista de mascotas por la longitud de cada entrada. En ese caso, Python ofrece el argumento clave, que acepta una función definida por el usuario para especificar los criterios de clasificación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
>>> pets = ['Turtle', 'Cat', 'Fish', 'Dingo']
>>> get_len(x):
...    return len(x)
...
>>> new_pets = sorted(pets, key=get_len)
>>> new_pets
['Cat', 'Fish', 'Dingo', 'Turtle']
>>> pets.sort(key=get_len)
>>> pets
['Cat', 'Fish', 'Dingo', 'Turtle']

Ahora consideremos un ejemplo un poco más complejo. Aquí tenemos una lista de diccionarios que contienen datos sobre un grupo de personas, y queremos ordenar la lista según las edades de las personas, en orden descendente. Para ello utilizaremos los argumentos de palabra clave key y reverse, así como una Función lambda de Python. De esa forma, podemos crear la función de clasificación sobre la marcha, en lugar de definirla de antemano:

1
2
3
4
5
6
7
>>> data = [ { 'name': 'Billy', 'age': 26, 'country': 'USA' }, { 'name': 'Timmy', 'age': 5, 'country': 'Australia' }, { 'name': 'Sally', 'age': 19, 'country': 'Costa Rica' }, { 'name': 'Tommy', 'age': 67, 'country': 'Serbia' } ]
>>> new_data = sorted(data, key=lambda x: x['age'], reverse=True)
>>> new_data
[{'country': 'Serbia', 'age': 67, 'name': 'Tommy'}, {'country': 'USA', 'age': 26, 'name': 'Billy'}, {'country': 'Costa Rica', 'age': 19, 'name': 'Sally'}, {'country': 'Australia', 'age': 5, 'name': 'Timmy'}]
>>> data.sort(key=lambda x: x['age'], reverse=True)
>>> data
[{'country': 'Serbia', 'age': 67, 'name': 'Tommy'}, {'country': 'USA', 'age': 26, 'name': 'Billy'}, {'country': 'Costa Rica', 'age': 19, 'name': 'Sally'}, {'country': 'Australia', 'age': 5, 'name': 'Timmy'}]

Observe cómo los diccionarios comenzaron en un orden aparentemente aleatorio y luego terminaron con las personas mayores primero y las personas más jóvenes al final de la lista.

El uso de las funciones de clasificación y lambdas de esta manera nos permite clasificar fácilmente estructuras de datos complejas, todo en una sola línea de código. Y el orden de clasificación se puede establecer en orden descendente configurando reverse=True.

Sobre el autor

Este artículo fue escrito por Jacob Stopak, un consultor y desarrollador de software apasionado por ayudar a otros a mejorar sus vidas a través del código. Jacob es el creador de Tarjeta de código, una herramienta conveniente para que los desarrolladores busquen, copien y peguen fragmentos de código comunes.

Licensed under CC BY-NC-SA 4.0