Python 에서 리스트가 회문인지 확인하는 방법

PythonBeginner
지금 연습하기

소개

이 랩에서는 Python 에서 리스트가 회문 (palindrome) 인지 확인하는 방법을 배우게 됩니다. 회문은 앞뒤로 똑같이 읽히는 시퀀스입니다. 이 랩은 리스트 회문을 식별하는 Python 스크립트를 만드는 과정을 안내합니다.

슬라이싱을 사용하여 리스트를 뒤집힌 버전과 비교하는 방법과, 명시적으로 리스트를 뒤집어 비교하는 두 가지 방법을 살펴보겠습니다. 이 랩에서는 주어진 리스트가 회문인지 여부를 보여주는 스크립트를 실행하고 출력을 해석하는 방법에 대한 코드 예제와 지침을 제공합니다.

리스트 회문 이해하기

이 단계에서는 리스트 회문 (list palindrome) 에 대해 배우고 Python 에서 이를 식별하는 방법을 배우게 됩니다. 회문은 앞뒤로 똑같이 읽히는 시퀀스입니다. 예를 들어, "madam"이라는 단어는 회문입니다. 리스트의 맥락에서, 리스트 회문은 처음부터 끝까지 또는 끝에서부터 처음까지 읽을 때 요소가 동일한 리스트입니다.

리스트 회문을 탐구하기 위해 Python 스크립트를 만들어 보겠습니다.

  1. VS Code 편집기를 엽니다.

  2. ~/project 디렉토리에 palindrome.py라는 새 파일을 만듭니다.

    touch ~/project/palindrome.py
  3. 편집기에서 palindrome.py 파일을 엽니다.

이제 리스트가 회문인지 확인하는 방법을 이해하기 위해 palindrome.py 파일에 코드를 추가해 보겠습니다.

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)}")

이 코드에서:

  • 리스트 lst를 입력으로 받는 함수 is_palindrome(lst)를 정의합니다.
  • 함수 내부에서 슬라이싱 lst[::-1]을 사용하여 리스트를 뒤집힌 버전과 비교합니다.
  • 리스트가 회문이면 함수는 True를 반환하고, 그렇지 않으면 False를 반환합니다.
  • 회문인 list1과 그렇지 않은 list2의 두 가지 예시 리스트를 만듭니다.
  • print() 함수를 사용하여 각 리스트가 회문인지 여부를 표시합니다.

스크립트를 실행하려면 터미널에서 다음 명령을 실행합니다.

python ~/project/palindrome.py

다음 출력을 볼 수 있습니다.

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

이 출력은 list1이 회문이고 list2는 그렇지 않음을 확인합니다.

뒤집힌 리스트와 비교

이 단계에서는 리스트를 명시적으로 뒤집고 이를 원래 리스트와 비교하여 리스트가 회문인지 확인하는 또 다른 방법을 살펴보겠습니다. 이 접근 방식은 회문 검사에 대한 보다 자세한 이해를 제공합니다.

이전 단계에서 생성한 palindrome.py 파일을 수정해 보겠습니다.

  1. VS Code 편집기에서 palindrome.py 파일을 엽니다.

  2. palindrome.py 파일의 내용을 다음과 같이 수정합니다.

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)}")

이 수정된 코드에서:

  • is_palindrome(lst) 함수 내부에서 슬라이싱 lst[::-1]을 사용하여 입력 리스트 lst의 뒤집힌 복사본을 만들고 이를 reversed_lst 변수에 저장합니다.
  • 그런 다음, 등가 연산자 ==를 사용하여 원래 리스트 lst를 뒤집힌 리스트 reversed_lst와 비교합니다.
  • 원래 리스트가 뒤집힌 리스트와 같으면 (즉, 회문이면) 함수는 True를 반환하고, 그렇지 않으면 False를 반환합니다.

스크립트를 실행하려면 터미널에서 다음 명령을 실행합니다.

python ~/project/palindrome.py

이전 단계와 동일한 출력을 볼 수 있습니다.

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

이 출력은 명시적 뒤집기 방법을 사용하여 list1이 회문이고 list2는 그렇지 않음을 확인합니다. 이 접근 방식은 로직을 더 명시적으로 만들고 이해하기 쉽게 합니다.

슬라이싱을 이용한 리스트 뒤집기

이 단계에서는 Python 에서 리스트를 뒤집기 위해 슬라이싱이 어떻게 사용되는지에 중점을 둡니다. 슬라이싱은 리스트의 일부를 추출할 수 있는 강력한 기능이며, 리스트의 뒤집힌 복사본을 만드는 데에도 사용할 수 있습니다.

palindrome.py 파일을 다시 살펴보고 슬라이싱 기술을 자세히 살펴보겠습니다.

  1. VS Code 편집기에서 palindrome.py 파일을 엽니다.

  2. palindrome.py 파일의 내용이 다음과 같은지 확인합니다.

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)}")

이 코드의 핵심 부분은 lst[::-1]입니다. 이것은 리스트의 뒤집힌 복사본을 만드는 슬라이싱 연산입니다. 자세히 살펴보겠습니다.

  • lst[:]는 전체 리스트의 복사본을 만듭니다.
  • lst[start:end]는 인덱스 start에서 end-1까지의 슬라이스를 만듭니다.
  • lst[start:end:step]을 사용하면 step을 지정할 수 있습니다. step-1이면 리스트를 뒤로 반복합니다.
  • startend를 생략하고 step-1로 사용하면 (즉, lst[::-1]) 전체 리스트의 뒤집힌 복사본을 만듭니다.

이를 더 자세히 설명하기 위해 슬라이싱의 효과를 확인하기 위해 몇 가지 print 문을 추가해 보겠습니다.

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)}")

이제 스크립트를 다시 실행합니다.

python ~/project/palindrome.py

회문 검사 결과 전에 원래 리스트와 뒤집힌 리스트가 출력되는 것을 볼 수 있습니다.

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

이것은 [::-1]을 사용한 슬라이싱이 어떻게 효과적으로 리스트를 뒤집고, 이를 사용하여 원래 리스트가 회문인지 여부를 결정하는지 보여줍니다.

요약

이 Lab 에서는 Python 에서 앞뒤로 동일하게 읽히는 리스트인 회문을 식별하는 방법을 배웠습니다. 슬라이싱 (lst[::-1]) 을 사용하여 리스트를 효율적으로 뒤집고 원래 리스트와 비교하여 회문이면 True를 반환하고 그렇지 않으면 False를 반환하는 is_palindrome(lst) 함수를 포함하는 palindrome.py 스크립트를 만들었습니다.

스크립트는 두 개의 예제 리스트, list1 (회문) 과 list2 (회문 아님) 로 테스트되었으며, 출력 결과는 함수의 회문 식별 능력을 확인했습니다. 또한 이 Lab 에서는 비교를 위해 리스트를 명시적으로 뒤집는 개념을 소개했지만, 제공된 내용은 잘렸습니다.