Diferencia entre sort() y sorted() en Python

Vaibhav Vaibhav 30 enero 2023
  1. La función sort() en Python
  2. La función sorted() en Python
Diferencia entre sort() y sorted() en Python

La ordenación es un tema muy importante en el mundo de la informática. Hay muchos algoritmos disponibles para ordenar matrices de datos, como la clasificación por fusión, la clasificación rápida, la clasificación por burbujas, la clasificación por selección, la clasificación por inserción, etc. Todos estos algoritmos tienen diferentes complejidades de tiempo y espacio, pero la combinación y la rápida generalmente se consideran los mejores. Dado que la clasificación es una operación muy común, los lenguajes de programación contienen funciones integradas para clasificar los datos. Y Python es uno de ellos.

Pero, hay dos funciones para ordenar en Python, a saber, sort y sorted. En este artículo, aprenderemos sobre la diferencia entre estas dos funciones de clasificación.

La función sort() en Python

La función sort en Python ordena la lista en su lugar intercambiando los valores en los índices. Cuando llamamos a la función sort sobre una lista, no se devuelve una nueva lista; más bien, se ordena la misma lista. La función sort se puede utilizar para ordenar listas.

Consulte el siguiente código para ver un ejemplo.

myList = [1, 5, 2, 10, 33, 3, 9]
print(myList)
myList.sort()
print(myList)

Producción :

[1, 5, 2, 10, 33, 3, 9]
[1, 2, 3, 5, 9, 10, 33]

Como podemos ver, la misma lista se ordenó cuando llamamos a la función sort sobre ella.

Si deseamos ordenar la lista en orden inverso, también podemos hacerlo estableciendo el argumento reverse en True.

Consulte el siguiente código para el mismo.

myList = [1, 5, 2, 10, 33, 3, 9]
print(myList)
myList.sort(reverse=True)
print(myList)

Producción :

[1, 5, 2, 10, 33, 3, 9]
[33, 10, 9, 5, 3, 2, 1]

La función sort tiene otro parámetro, a saber, key, que se puede utilizar para definir qué valor considerar para la ordenación. Por ejemplo, si tenemos una lista de pares y deseamos ordenar los pares considerando el segundo valor, podemos hacerlo usando el parámetro key.

Consulte el siguiente código para ver un ejemplo.

def secondElement(element):
    return element[1]


data = [(1, 2), (3, 4), (5, 3), (6, 6), (3, 0), (10, 1)]
print("Before sorting:", data)
data.sort(key=secondElement)
print("After sorting:", data)

Producción :

Before sorting: [(1, 2), (3, 4), (5, 3), (6, 6), (3, 0), (10, 1)]
After sorting: [(3, 0), (10, 1), (1, 2), (5, 3), (3, 4), (6, 6)]

Como podemos ver, la lista se ordena según el segundo número dentro de los pares.

También podemos ordenar una lista de diccionarios usando el mismo enfoque. Consulte el siguiente código para el mismo.

def byName(entry):
    return entry["name"]


def byAge(entry):
    return entry["age"]


def byRank(entry):
    return entry["rank"]


data = [
    {
        "name": "Vaibhav",
        "age": 18,
        "rank": 1,
    },
    {
        "name": "Steve",
        "age": 24,
        "rank": 5,
    },
    {
        "name": "Olive",
        "age": 12,
        "rank": 2,
    },
    {
        "name": "Allison",
        "age": 17,
        "rank": 4,
    },
]

print("Original Data")
print(data)
print("Sorted by Name")
data.sort(key=byName)
print(data)
print("Sorted by Age")
data.sort(key=byAge)
print(data)
print("Sorted by Rank")
data.sort(key=byRank)
print(data)

Producción :

Original Data
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}]
Sorted by Name
[{'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}]
Sorted by Age
[{'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}]
Sorted by Rank
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Steve', 'age': 24, 'rank': 5}]

Como podemos ver, las entradas dentro de la lista de diccionarios se ordenan según la clave que definimos.

La función sorted() en Python

Al igual que la función sort, sorted también se utiliza para ordenar listas. Pero, la función sorted devuelve una nueva lista en lugar de ordenar la misma lista en su lugar. Ésta es la principal diferencia entre las dos funciones. Entendamos esto con un ejemplo.

myList = [1, 5, 2, 10, 33, 3, 9]
print("Before called sorted():", myList)
newList = sorted(myList)
print("After called sorted():", myList)
print("New list:", newList)

Producción :

Before called sorted(): [1, 5, 2, 10, 33, 3, 9]
After called sorted(): [1, 5, 2, 10, 33, 3, 9]
New list: [1, 2, 3, 5, 9, 10, 33]

Como podemos ver, la lista que pasamos a la función sorted permanece igual, y se devolvió una nueva lista, que se almacena dentro de la variable newList. Los dos parámetros, a saber, reverse y key, también están disponibles en esta función. Usando los dos, podemos obtener una lista ordenada en orden inverso y ordenar la lista según una clave personalizada. Los siguientes ejemplos representan lo mismo.

Ejemplo para el parámetro reverso.

myList = [1, 5, 2, 10, 33, 3, 9]
print("Before called sorted():", myList)
newList = sorted(myList, reverse=True)
print("After called sorted():", myList)
print("New list:", newList)

Producción :

Before called sorted(): [1, 5, 2, 10, 33, 3, 9]
After called sorted(): [1, 5, 2, 10, 33, 3, 9]
New list: [33, 10, 9, 5, 3, 2, 1]

Y, un ejemplo para el parámetro key.

def byName(entry):
    return entry["name"]


def byAge(entry):
    return entry["age"]


def byRank(entry):
    return entry["rank"]


data = [
    {
        "name": "Vaibhav",
        "age": 18,
        "rank": 1,
    },
    {
        "name": "Steve",
        "age": 24,
        "rank": 5,
    },
    {
        "name": "Olive",
        "age": 12,
        "rank": 2,
    },
    {
        "name": "Allison",
        "age": 17,
        "rank": 4,
    },
]

print("Original Data")
print(data)
print("Sorted by Name")
nameSorted = sorted(data, key=byName)
print(nameSorted)
print("Sorted by Age")
ageSorted = sorted(data, key=byAge)
print(ageSorted)
print("Sorted by Rank")
rankSorted = sorted(data, key=byRank)
print(rankSorted)
print("Data after all operations")
print(data)

Producción :

Original Data
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}]
Sorted by Name
[{'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}]
Sorted by Age
[{'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}]
Sorted by Rank
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Steve', 'age': 24, 'rank': 5}]
Data after all operations
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}]
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

Artículo relacionado - Python Sorting