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')