Em [[Linguagem de programação Python|Python]], existem duas funções principais para ordenar sequências: `list.sort()` e `sorted()`. Ambas permitem ordenar listas, tuplas e outras estruturas de dados, mas funcionam de maneiras diferentes.
**1. `list.sort()`**
* É um método que modifica a lista original diretamente (in-place).
* Não retorna nada (`None`).
* Só pode ser usado com listas (tipos mutáveis).
**Exemplo:**
```python
lista = [3, 1, 4, 1, 5, 9, 2, 6]
lista.sort()
print(lista) # Output: [1, 1, 2, 3, 4, 5, 6, 9]
```
**2. `sorted()`**
* Retorna uma nova lista ordenada, sem modificar a sequência original.
* Pode ser usado com qualquer iterável (listas, tuplas, strings, etc.).
**Exemplo:**
```python
lista = [3, 1, 4, 1, 5, 9, 2, 6]
lista_ordenada = sorted(lista)
print(lista) # Output: [3, 1, 4, 1, 5, 9, 2, 6] (lista original não foi modificada)
print(lista_ordenada) # Output: [1, 1, 2, 3, 4, 5, 6, 9]
```
**Parâmetros `key` e `reverse`**
Ambas as funções `list.sort()` e `sorted()` aceitam os parâmetros opcionais `key` e `reverse` para personalizar o processo de ordenação:
* **`key`**: Especifica uma função que será aplicada a cada elemento antes da comparação. O resultado dessa função é usado como chave para a ordenação. Isso é útil para ordenar objetos complexos com base em um atributo específico.
```python
pessoas = [
("Alice", 30),
("Bob", 25),
("Charlie", 35)
]
# Ordenar por idade
pessoas_ordenadas_por_idade = sorted(pessoas, key=lambda pessoa: pessoa[1])
print(pessoas_ordenadas_por_idade)
# Output: [('Bob', 25), ('Alice', 30), ('Charlie', 35)]
```
* **`reverse`**: Um valor booleano que indica se a ordenação deve ser feita em ordem decrescente (`True`) ou crescente (`False`, padrão).
```python
lista = [3, 1, 4, 1, 5, 9, 2, 6]
lista_ordenada_decrescente = sorted(lista, reverse=True)
print(lista_ordenada_decrescente)
# Output: [9, 6, 5, 4, 3, 2, 1, 1]
```
**Exemplo combinado:**
```python
palavras = ["maçã", "banana", "abacaxi", "uva"]
# Ordenar por comprimento da palavra em ordem decrescente
palavras_ordenadas = sorted(palavras, key=len, reverse=True)
print(palavras_ordenadas)
# Output: ['abacaxi', 'banana', 'maçã', 'uva']
```
**Quando usar `list.sort()` vs. `sorted()`?**
* Use `list.sort()` quando você precisa modificar a lista original e não precisa da lista original. É mais eficiente em termos de memória, pois não cria uma nova lista.
* Use `sorted()` quando você precisa manter a lista original intacta e obter uma nova lista ordenada.
**Referência:**
* [How to sort — Python 3.11.0 documentation](https://docs.python.org/3/howto/sorting.html)