Como Verificar se uma Lista é um Palíndromo em Python

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como determinar se uma lista é um palíndromo em Python. Um palíndromo é uma sequência que se lê da mesma forma para frente e para trás. O laboratório guia você na criação de um script Python para identificar palíndromos de lista.

Você explorará dois métodos: comparar uma lista com sua versão invertida usando slicing (fatiamento), e inverter explicitamente a lista para comparação. O laboratório fornece exemplos de código e instruções sobre como executar o script e interpretar a saída, demonstrando se as listas fornecidas são palíndromos ou não.

Entenda os Palíndromos de Listas

Nesta etapa, você aprenderá sobre palíndromos de lista e como identificá-los em Python. Um palíndromo é uma sequência que se lê da mesma forma para frente e para trás. Por exemplo, a palavra "arara" é um palíndromo. No contexto de listas, um palíndromo de lista é uma lista cujos elementos são os mesmos quando lidos do início ao fim ou do fim ao início.

Vamos começar criando um script Python para explorar palíndromos de lista.

  1. Abra seu editor VS Code.

  2. Crie um novo arquivo chamado palindrome.py no diretório ~/project.

    touch ~/project/palindrome.py
    
  3. Abra o arquivo palindrome.py no editor.

Agora, vamos adicionar algum código ao arquivo palindrome.py para entender como verificar se uma lista é um palíndromo.

def is_palindrome(lst):
    return lst == lst[::-1]

## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

Neste código:

  • Definimos uma função is_palindrome(lst) que recebe uma lista lst como entrada.
  • Dentro da função, comparamos a lista com sua versão invertida usando slicing lst[::-1].
  • A função retorna True se a lista for um palíndromo e False caso contrário.
  • Criamos duas listas de exemplo, list1 que é um palíndromo, e list2 que não é.
  • Usamos a função print() para exibir se cada lista é um palíndromo ou não.

Para executar o script, execute o seguinte comando no terminal:

python ~/project/palindrome.py

Você deve ver a seguinte saída:

[1, 2, 3, 2, 1] is a palindrome: True
[1, 2, 3, 4, 5] is a palindrome: False

Esta saída confirma que list1 é um palíndromo, e list2 não é.

Comparar com Lista Invertida

Nesta etapa, você explorará outro método para verificar se uma lista é um palíndromo, invertendo explicitamente a lista e comparando-a com a lista original. Essa abordagem fornece uma compreensão mais detalhada da verificação de palíndromo.

Vamos modificar o arquivo palindrome.py que você criou na etapa anterior.

  1. Abra o arquivo palindrome.py no seu editor VS Code.

  2. Modifique o conteúdo do arquivo palindrome.py da seguinte forma:

def is_palindrome(lst):
    reversed_lst = lst[::-1]
    return lst == reversed_lst

## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

Neste código modificado:

  • Dentro da função is_palindrome(lst), criamos uma cópia invertida da lista de entrada lst usando slicing lst[::-1] e a armazenamos na variável reversed_lst.
  • Em seguida, comparamos a lista original lst com a lista invertida reversed_lst usando o operador de igualdade ==.
  • A função retorna True se a lista original for igual à lista invertida (ou seja, é um palíndromo) e False caso contrário.

Para executar o script, execute o seguinte comando no terminal:

python ~/project/palindrome.py

Você deve ver a mesma saída da etapa anterior:

[1, 2, 3, 2, 1] is a palindrome: True
[1, 2, 3, 4, 5] is a palindrome: False

Esta saída confirma que list1 é um palíndromo, e list2 não é, usando o método de inversão explícita. Essa abordagem torna a lógica mais explícita e fácil de entender.

Usar Slicing para Inversão

Nesta etapa, você se concentrará especificamente em como o slicing é usado para inverter uma lista em Python. Slicing é um recurso poderoso que permite extrair porções de uma lista, e também pode ser usado para criar uma cópia invertida da lista.

Vamos revisitar o arquivo palindrome.py e examinar a técnica de slicing mais de perto.

  1. Abra o arquivo palindrome.py no seu editor VS Code.

  2. Certifique-se de que o conteúdo do arquivo palindrome.py seja o seguinte:

def is_palindrome(lst):
    reversed_lst = lst[::-1]
    return lst == reversed_lst

## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

A parte chave deste código é lst[::-1]. Esta é uma operação de slicing que cria uma cópia invertida da lista. Vamos detalhar:

  • lst[:] criaria uma cópia de toda a lista.
  • lst[start:end] criaria uma fatia (slice) do índice start até end-1.
  • lst[start:end:step] permite que você especifique um step (passo). Um passo de -1 significa iterar para trás pela lista.
  • Ao omitir start e end e usar um passo de -1 (ou seja, lst[::-1]), você cria uma cópia invertida de toda a lista.

Para ilustrar ainda mais isso, vamos adicionar algumas instruções print para ver o efeito do slicing:

def is_palindrome(lst):
    reversed_lst = lst[::-1]
    print(f"Original list: {lst}")
    print(f"Reversed list: {reversed_lst}")
    return lst == reversed_lst

## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

Agora, execute o script novamente:

python ~/project/palindrome.py

Você verá as listas originais e invertidas impressas antes do resultado da verificação de palíndromo:

Original list: [1, 2, 3, 2, 1]
Reversed list: [1, 2, 3, 2, 1]
[1, 2, 3, 2, 1] is a palindrome: True
Original list: [1, 2, 3, 4, 5]
Reversed list: [5, 4, 3, 2, 1]
[1, 2, 3, 4, 5] is a palindrome: False

Isso demonstra como o slicing com [::-1] inverte efetivamente a lista, que é então usada para determinar se a lista original é um palíndromo.

Resumo

Neste laboratório, você aprendeu como identificar palíndromos de listas em Python, que são listas que são lidas da mesma forma para frente e para trás. Você criou um script palindrome.py contendo uma função is_palindrome(lst) que usa slicing (lst[::-1]) para inverter eficientemente uma lista e compará-la com a original, retornando True se for um palíndromo e False caso contrário.

O script foi testado com duas listas de exemplo, list1 (um palíndromo) e list2 (não um palíndromo), e a saída confirmou a capacidade da função de identificar corretamente os palíndromos. O laboratório também introduziu o conceito de inversão explícita da lista para comparação, embora o conteúdo fornecido tenha sido truncado.