티스토리 뷰

파이썬으로 문자열을 거꾸로 출력하는 방법은 다양하다.

각 경우마다 출력 형태나 조건이 다르기 때문에 헷갈릴 수 있으니 잘 알아두자.

 

word = "racecar"

#=> True

 

# for문 활용

- 인덱싱과 temp 변수를 활용한다.

- join 메서드를 활용한다.

def is_palindrome(word):
    words = list(word)
    for left in range(len(words) // 2):	# 문자열의 절반 인덱스까지 반복
        right = len(words) - left - 1	# 왼쪽 및 오른쪽 인덱스(대칭) 설정

        temp = words[left]
        words[left] = words[right]
        words[right] = temp

    words = ''.join(word)
    if words == word: return True
    return False

print(is_palindrome("racecar"))

 

# for문 활용2

- tuple을 활용하여 pythonic하게 푼다.

def is_palindrome2(word):
    words = list(word)
    for left in range(len(words) // 2):
        right = len(words) - left - 1
        
        # tuple 활용
        # = 의 오른쪽 튜플이 위치 바뀌기 전의 값을 보관하고
        # 그 값을 = 왼쪽에 각각 할당한다.
        words[left], words[right] = words[right], words[left]

    words = ''.join(word)
    if words == word: return True
    return False

print(is_palindrome2("racecar"))

 

# for문 활용3

- range 역순출력을 활용한다.

def is_palindrome(word):
    words = list(word)
    pals = []
    for i in range(len(words) - 1, -1, -1):
        pals.append(words[i])

    if words == pals: return True
    return False

 

# 리스트 슬라이싱 활용

- 인덱스 역순출력[::-1] 을 활용한다.

def is_palindrome(word):
    words = list(word)  # ['r', 'a', 'c', 'e', 'c', 'a', 'r']
    pals = words[::-1]  # ['r', 'a', 'c', 'e', 'c', 'a', 'r']
    
    if words == pals: return True
    return False

 

# reverse 함수 활용

- 변수에 할당하지 않는다. (반환값이 없다.) 이 점에 주의하자.

- join 을 통해 하나의 문자열로 합쳐준다.

def is_palindrome(word):
    words = list(word)
    words.reverse()     # 변수할당x
    pal_words = ''.join(words)  # 문자열 리스트를 문자로 join
    
    if word == pal_words: return True
    return False

 

# reversed 메서드 활용

- reverse는 list에만 활용 가능하나 reversed는 문자열에도 바로 적용이 가능하다는 장점이 있다.

- 문자열에 적용하면 그 자체로는 object가 반환되기 때문에 list로 만들어주어야 한다.

- 또는 바로 Join으로 오브젝트를 연결하면 문자열이 잘 반환된다.

def is_palindrome(word):
    pal_word = reversed(word) # <reversed object at 0x7fc6aee92e50>
    print(list(pal_word))     # ['r', 'a', 'c', 'e', 'c', 'a', 'r']
    print(''.join(reversed(word))) # racecar

    if word == ''.join(reversed(word)): return True
    return False

 

'Python' 카테고리의 다른 글

random 모듈 총정리  (0) 2021.12.10
list method 총정리  (0) 2021.12.10
파이썬 소수점 이하 자리수 0으로 맞추기  (0) 2021.12.06
slicing, startswith  (0) 2021.12.06
딕셔너리 sum, ternary expression, list comprehension, zfill  (0) 2021.11.29
댓글