Python
Tipos de datos contenedor
list
ordenar

Ordenación de Listas en Python: Explicación y Ejemplos

Ordenar datos es un algoritmo fundamental en programación, y una de las tareas más frecuentemente realizadas en el desarrollo del mundo real. Debido a su importancia, Python proporciona varios métodos para ordenar en diferentes funciones o métodos. Es una buena idea utilizar las funciones integradas de Python tanto como sea posible, porque en la mayoría de los casos son más fiables y rápidas que escribir tu propio código.

Así que en este artículo, echaremos un vistazo a los métodos de ordenación de listas que proporciona Python. Comenzando con la función básica sorted() o método sort(), cubriremos varias situaciones.

1. La función sorted(), que devuelve una nueva lista ordenada

La función sorted() es una función incorporada que toma la lista dada como argumento y devuelve una nueva lista ordenada en orden ascendente. La lista original no se modifica.

Para usar la función sorted(), pasa la lista que quieres ordenar como parámetro, como se muestra a continuación.

lista_sin_ordenar = [5, 2, 8, 1, 3]
lista_ordenada = sorted(lista_no_ordenada)
 
print(lista_ordenada) # Salida: [1, 2, 3, 5, 8]

2. Ordenación descendente con el parámetro inverso

La función sorted() toma dos parámetros, key y reverse.

De ellos, el parámetro reverse se pasa si se desea una ordenación descendente, y si se le pasa el valor True, se ordenará en orden descendente. Como vimos en la Sección 1, la razón por la que la función sorted() ordena por defecto en orden ascendente es porque este parámetro tiene por defecto el valor False.

lista_sin_ordenar = [5, 2, 8, 1, 3]
lista_ordenada = sorted(lista_sin_ordenar, reverse=True)
 
print(lista_ordenada) # Salida: [8, 5, 3, 2, 1]

3. Uso del parámetro key para ordenar por criterios personalizados

Si queremos utilizar la función sorted() para ordenar por criterios personalizados que no sean ascendentes o descendentes, utilizaremos el parámetro key. Podemos pasar una función incorporada o personalizada al parámetro key para aplicar el nuevo criterio de ordenación.

Empecemos con un ejemplo de ordenación pasando una función incorporada.

Pasamos la función incorporada de Python len a la función clave y ordenamos por su valor de retorno, la longitud de la cadena. Ten en cuenta que no pasamos un valor para el parámetro reverse, por lo que ordena en orden ascendente.

palabras = ['apple', 'banana', 'cherry', 'date', 'fig']
palabras_ordenadas = sorted(palabras, key=len)
 
print(palabras_ordenadas)  # Output: ['fig', 'date', 'apple', 'banana', 'cherry']

A continuación se muestra un ejemplo de ordenación pasando una función personalizada definida con la función lambda.

Para organizar varios diccionarios con nombres y valores de edad por valor de edad, En la función lambda, tomamos cada miembro de la lista como user y obtenemos el valor correspondiente a la clave age para ordenar por.

users = [
    {
        'name': 'Alice',
        'age': 30
    },
    {
        'name': 'Bob',
        'age': 25
    },
    {
        'name': 'Charlie',
        'age': 35
    },
    {'
        name': 'David',
        'age': 28
    }
]
 
sorted_users = sorted(users, key=lambda user: user['age'])
 
print(sorted_users)

4. Ordenación por múltiples criterios

Para ordenar por varios criterios, basta con devolver una tupla con los valores de los criterios deseados desde la función key.

El siguiente ejemplo ordena los datos de las películas por clasificación y año de estreno. "Memento" y "Prestige", que tienen la misma calificación, se ordenan por año de estreno.

movies = [
    {
        'title': 'Inception',
        'year': 2010,
        'rating': 8.8
    },
    {
        'title': 'Interstellar',
        'year': 2014,
        'rating': 8.6
    },
    {
        'title': 'The Prestige',
        'year': 2006,
        'rating': 8.5
    },
    {
        'title': 'Memento',
        'year': 2000,
        'rating': 8.5
    }
]
sorted_movies = sorted(movies, key=lambda movie: (movie['rating'], movie['year']))
print(sorted_movies)

5. El método list.sort(), que devuelve el valor None

El método list.sort() es el principal método integrado de la clase list de Python. A diferencia de la función sorted() que vimos antes, este método pone la lista en un estado ordenado y devuelve None.

El método sort()[:py} puede ser llamado en la lista que desea ordenar, como se muestra en el código siguiente.

lista_sin_ordenar = [5, 2, 8, 1, 3]
lista_sin_ordenar.sort()
 
print(lista_sin_ordenar)  # Output: [1, 2, 3, 5, 8]

El método sort() también tiene dos parámetros: key y reverse. Tienen el mismo propósito que la función seorted(.

lista_sin_ordenar = [5, 2, 8, 1, 3]
lista_sin_ordenar.sort(reverse=True)
 
print(unsorted_list)  # Output: [8, 5, 3, 2, 1]
 
nombres = ['Alice', 'Bob', 'Charlie', 'David']
nombres.sort(key=len)
 
print(nombres)  # Output: ['Bob', 'Alice', 'David', 'Charlie']

6. método list.sort() vs. función sorted()

La principal diferencia entre los dos métodos utilizados para ordenar en Python es si manipulan o no la lista original.

El método list.sort() ordena la lista original. No conserva la lista original. La función sorted() conserva la lista original y devuelve una nueva lista ordenada.

Mientras que el método list.sort() tiene la ventaja de usar menos memoria, la función sorted() tiene la ventaja de preservar la lista original y puede usarse con muchas funciones de programación funcional.

original_list = [5, 2, 8, 1, 3]
sorted_list = sorted(original_list)
 
print(original_list)  # Output: [5, 2, 8, 1, 3]
print(sorted_list)  # Output: [1, 2, 3, 5, 8]
 
original_list.sort()
 
print(original_list) # Output: [1, 2, 3, 5, 8]

7. Python sorting algorithm: TimSort

The default sorting algorithm used to sort lists in modern Python is TimSort. This algorithm was developed by Tim Peters and first introduced in Python in 2002. It has since been used in Java and many other programming languages and systems, including Android and Swift.

TimSort is a sorting algorithm that combines merge sorting and insertion sorting. It works by performing an insertion sort on a portion of the data and then combining it with a merge sort. This has the advantage of being very fast if certain parts of the data are already sorted.

TimSort has a worst-case time complexity of O(n log n), and a linear time complexity of O(n) for an already sorted list.

Conclusion

In this article, we've covered the basics of sorting lists in Python, including the use of key functions and algorithms. Hopefully this will help you in your own development.

copyright for Ordenación de Listas en Python: Explicación y Ejemplos

© 2023 All rights reserved.