Técnicas Avançadas de Construção de Listas em Python com Expressões Ternárias e Loops

Expressões de lista em Python oferecem uma maneira concisa de criar listas a partir de iteráveis, podendo encluir condicionais. Vejamos exemplos para ilustrar seu uso.

Considere uma lista de números intieros. Podemos gerar uma nova lista com todos os elementos ou apenas os que atendem a uma condição:

numeros = [10, 5, 8, 3, 9, 2, 7]
lista_completa = [valor for valor in numeros]
lista_filtrada = [valor for valor in numeros if valor > 5]
print(lista_completa)  # Saída: [10, 5, 8, 3, 9, 2, 7]
print(lista_filtrada)  # Saída: [10, 8, 9, 7]

Sem usar compreensão de lista, o código seria mais verboso:

lista_filtrada_manual = []
for valor in numeros:
    if valor > 5:
        lista_filtrada_manual.append(valor)
print(lista_filtrada_manual)  # Saída: [10, 8, 9, 7]

Expressões de lista aninhadas permitem combinar múltiplos iteráveis. Por exemplo, criar pares de elemenots de duas listas:

letras = ['a', 'b', 'c']
pares = [(num, letra) for num in numeros for letra in letras]
pares_filtrados = [(num, letra) for num in numeros for letra in letras if num % 2 == 0 and letra != 'c']
print(pares_filtrados)  # Saída: [(10, 'a'), (10, 'b'), (8, 'a'), (8, 'b'), (2, 'a'), (2, 'b')]

A cláusula else em Python pode ser usada de forma especial com laços for e while, além de blocos try/except. Em um laço for, o bloco else é executado se o laço terminar normalmente, sem interrupção por break.

Exemplo: verificar números primos usando else em um laço interno:

def identificar_primos(limite):
    for candidato in range(2, limite):
        for divisor in range(2, candidato):
            if candidato % divisor == 0:
                break
        else:
            print(f"{candidato} é primo")

identificar_primos(10)  # Saída: 2, 3, 5, 7

No tratamento de exceções, else é executado se o bloco try não lançar exceções. Isso simplifica lógicas ao evitar flags de controle.

def converter_para_inteiro(texto):
    try:
        numero = int(texto)
    except ValueError:
        print(f"Falha ao converter '{texto}'")
    else:
        print(f"Conversão bem-sucedida: {numero}")

converter_para_inteiro("42")      # Saída: Conversão bem-sucedida: 42
converter_para_inteiro("abc")     # Saída: Falha ao converter 'abc'

A expressão ternária em Python permite atribuições condicionais de forma compacta:

a, b = 8, 5
resultado = a if a > b else b
print(resultado)  # Saída: 8

# Alternativas equivalentes
resultado_lista = [b, a][a > b]
resultado_logico = (a > b and a or b)
print(resultado_lista)  # Saída: 8
print(resultado_logico)  # Saída: 8

Tags: Python List Comprehensions Ternary Operators Control Structures Exception Handling

Publicado em 6-8 19:14 por Thomas