Coletânea de Perguntas de Entrevista em Python

Verificação de Palíndromo

Uma forma simples de verificar se uma string é um palíndromo em Python é comparar a string com sua versão invertida usando slicing:

s = 'São PaulouolPãS'
if s == s[::-1]:
    print('É um palíndromo')
else:
    print('Não é um palíndromo')

Diferença entre Tuplas e Tipos Simples

Em Python, a presença ou ausência de vírgula após um valor determina se o resultado será uma tupla ou apenas o tipo do dado:

# Exemplos de criação de tuplas
t1 = (42,)          # Tipo: tuple
t2 = (True,)        # Tipo: tuple  
t3 = ('x',)         # Tipo: tuple
t4 = (42)           # Tipo: int (não é tupla)

Essa diferença é crucial ao trabalhar com operações que exigem estruturas de dados específicas.

Swap de Variáveis em Uma Linha

É possível trocar os valores de duas variáveis usando atribuição múltipla:

a, b = 10, 20
a, b = b, a
print(f'a={a}, b={b}')  # Saída: a=20, b=10

Remoção de Elementos de Lista com For

Iterar sobre uma lista enquanto remove seus elementos diretamente pode causar comportamento inesperado. Uma abordagem segura é percorrer o índice inverso:

lista = [1, 2, 3, 4, 5]
for i in range(len(lista) - 1, -1, -1):
    lista.pop(i)
print(lista)  # Saída: []

Conversão de String em Lista

Para transformar uma string como '1111' em uma lista de caracteres, use o método split() com um separador vazio:

s = '1111'
resultado = list(s)
print(resultado)  # ['1', '1', '1', '1']

Referência Circular em Listas

Quando uma lista faz referência a si mesma, isso gera uma estrutura recursiva que pode ser difícil de visualizar:

lst = [1, 2]
lst[1] = lst
print(lst[1])  # [1, [...]]

O uso de colchetes com elipse indica uma referência circular.

Manipulação de Geradores com Expressões

Geradores podem ser encadeados em expressões geradoras dentro de loops. O exemplo abaixo mostra como aplicar operações sucessivas:

def add(n, i):
    return n + i

def generator():
    for i in range(4):
        yield i

g = generator()

for num in [1, 10]:
    g = (add(num, i) for i in g)

print(list(g))  # Resultado: [20, 21, 22, 23]

A execução ocorre apenas quando o gerador é consumido, permitindo cálculos encadeados de forma eficiente.

Verificação de Repetição de Substring

Deterimnar se uma string pode ser formada pela repetição contínua de um padrão mais curto:

def verifica_repeticao(s):
    n = len(s)
    for i in range(1, n // 2 + 1):
        if n % i == 0:
            pattern = s[:i]
            if pattern * (n // i) == s:
                return True, f'{pattern} repetido {n // i} vezes'
    return False, 'Não é repetição de padrão'

# Teste
print(verifica_repeticao('abab'))  # (True, 'ab repetido 2 vezes')
print(verifica_repeticao('aba'))   # (False, 'Não é repetição de padrão')

Tags: Python palíndromo tuplas atribuição múltipla listas

Publicado em 8-28 22:50