O Python oferece diversas funções embutidas poderosas que podem ter seu comportamento modificado através do parâmetro key. Este parâmetro aceita uma função que é aplicada a cada item de um iterável antes das comparações serem feitas, permitindo personalização na forma como os elemantos são processados.
1. max() - Encontrando o Maior Elemento
A função max() retorna o maior item em um iterável ou o maior entre dois ou mais argumentos. Quando o parâmetro key é utilizado, a comparação é baseada no resultado dessa função aplicada a cada elemento.
lista_numeros = [1, 2, 3, -4]
print(f"Maior valor na lista: {max(lista_numeros)}")
# Usando 'key' com abs para encontrar o número com maior valor absoluto
print(f"Número com maior valor absoluto: {max(lista_numeros, key=abs)}")
# Saída:
# Maior valor na lista: 3
# Número com maior valor absoluto: -4
2. min() - Encontrando o Menor Elemento
Similarmente, min() retorna o mener item em um iterável ou o menor entre múltiplos argumentos. O key funciona da mesma forma, determinando o critério para a menor comparação.
lista_numeros = [-1, 0, 1, 2]
print(f"Menor valor na lista: {min(lista_numeros)}")
# Saída:
# Menor valor na lista: -1
3. filter() - Selecionando Elementos Condicionalmente
A função filter() constrói um iterador a partir daqueles elementos de um iterável para os quais uma função retorna verdadeiro. O parâmetro key aqui é a própria função de teste.
def eh_impar(numero):
return numero % 2 != 0
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# Em Python 3, filter retorna um iterador, que precisa ser convertido para lista se necessário
impares = list(filter(eh_impar, numeros))
print(f"Números ímpares: {impares}")
# Exemplo com lambda para remover a letra 'a' de uma string
texto = 'jason lv'
sem_a = ''.join(filter(lambda char: char != 'a', texto))
print(f"Texto sem 'a': {sem_a}")
# Saída:
# Números ímpares: [1, 3, 5, 7, 9]
# Texto sem 'a': json lv
4. map() - Aplicando Transformações a Elementos
A função map() aplica uma função a cada item de um iterável (ou múltiplos iteráveis) e retorna um iterador com os resultados. O primeiro argumento de map() é a função a ser aplicada.
def quadrado(numero):
return numero ** 2
sequencia = [1, 2, 3, 4, 5, 6]
quadrados = list(map(quadrado, sequencia))
print(f"Quadrados dos números: {quadrados}")
# Exemplo com lambda para aplicar transformações condicionais
transformados = list(map(lambda x: x * 10 if x > 3 else x / 2, sequencia))
print(f"Números transformados: {transformados}")
# Saída:
# Quadrados dos números: [1, 4, 9, 16, 25, 36]
# Números transformados: [0.5, 1.0, 1.5, 40, 50, 60]
5. sorted() - Ordenando Iteráveis de Forma Flexível
Diferente do método sort() de listas, a função sorted() retorna uma nova lista ordenada a partir dos itens em qualquer iterável. Ela oferece os parâmetros key e reverse para customização.
key: Uma função que é chamada para cada elemento antes de fazer as comparações. O valor retornado pela função é usado como critério de ordenação.reverse: Um booleano. SeTrue, a lista é ordenada em ordem decrescente. O padrão éFalse(ordem crescente).
lista_desordenada = [3, 2, 1, 4, 5, 6]
ordenada_desc = sorted(lista_desordenada, reverse=True)
print(f"Lista ordenada decrescente: {ordenada_desc}")
ordenada_asc = sorted(lista_desordenada) # Padrão é crescente
print(f"Lista ordenada crescente: {ordenada_asc}")
# Ordenando strings pelo comprimento usando 'key'
lista_strings = ['adf ee', 'zcv', 'qwer', 'a s s w']
ordenada_por_len = sorted(lista_strings, key=len)
print(f"Strings ordenadas por comprimento: {ordenada_por_len}")
# Saída:
# Lista ordenada decrescente: [6, 5, 4, 3, 2, 1]
# Lista ordenada crescente: [1, 2, 3, 4, 5, 6]
# Strings ordenadas por comprimento: ['zcv', 'qwer', 'adf ee', 'a s s w']
Utilizar o parâmetro key em funções como max(), min(), filter(), map() e sorted() permite um controle refinado sobre como os dados são processados e ordenados, tornando o código Python mais expressivo e eficiente.