Diferença entre sort() e sorted() em Python

Vaibhav Vaibhav 10 outubro 2023
  1. a função sort() em Python
  2. a função sorted() em Python
Diferença entre sort() e sorted() em Python

A classificação é um tema muito importante no mundo da informática. Existem muitos algoritmos disponíveis para ordenar matrizes de dados, como mesclar ordenação, ordenação rápida, ordenação de bolha, ordenação de seleção, ordenação de inserção, etc. Todos esses algoritmos têm diferentes complexidades de tempo e espaço, mas merge e rápido são geralmente considerados os melhores. Como a classificação é uma operação muito comum, as linguagens de programação contêm funções integradas para classificar os dados. E Python é um deles.

Mas, existem duas funções para ordenar em Python, a saber, sort e sorted. Neste artigo, aprenderemos sobre a diferença entre essas duas funções de classificação.

a função sort() em Python

A função sort em Python ordena a lista no lugar, trocando os valores em seus índices. Quando chamamos a função sort em uma lista, uma nova lista não é retornada; em vez disso, a mesma lista é classificada. A função sort() pode ser usada para ordenar listas.

Consulte o código a seguir para obter um exemplo.

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

Resultado:

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

Como podemos ver, a mesma lista foi classificada quando chamamos a função sort sobre ela.

Se desejarmos classificar a lista na ordem reversa, também podemos fazer isso definindo o argumento reverse para True.

Consulte o seguinte código para o mesmo.

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

Resultado:

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

A função sort possui ainda outro parâmetro, nomeadamente, key, que pode ser utilizado para definir o valor a considerar para ordenação. Por exemplo, se tivermos uma lista de pares e desejarmos classificar os pares considerando o segundo valor, podemos fazer isso usando o parâmetro key.

Consulte o código a seguir para obter um exemplo.

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)

Resultado:

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, a lista é classificada com base no segundo número dentro dos pares.

Também podemos classificar uma lista de dicionários usando a mesma abordagem. Consulte o seguinte código para o mesmo.

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)

Resultado:

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, as entradas dentro da lista de dicionários são classificadas com base na chave que definimos.

a função sorted() em Python

Como a função sort, sorted também é usado para ordenar listas. Mas, a função sorted retorna uma nova lista em vez de classificar a mesma lista no local. Esta é a principal diferença entre as duas funções. Vamos entender isso com um exemplo.

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)

Resultado:

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, a lista que passamos para a função sorted permanece a mesma, e uma nova lista foi retornada, que é armazenada dentro da variável newList. Os dois parâmetros, nomeadamente reverse e key, também estão disponíveis nesta função. Usando os dois, podemos obter uma lista classificada na ordem inversa e classificar a lista com base em uma chave personalizada. Os exemplos a seguir mostram o mesmo.

Exemplo para o 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)

Resultado:

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]

E, um exemplo para o parâmetro chave.

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)

Resultado:

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.