<개인공부>/[Python]

[python] 파이썬 문자열 뒤집기, 거꾸로 출력 하기 3가지 방법

BlockDMask 2021. 11. 10. 08:17
반응형

안녕하세요. BlockDMask입니다.
오늘은 파이썬에서 문자열을 뒤집을 수 있는 세 가지 방법에 대해서 알아보려고 합니다.
문자열을 뒤집어서 출력한다거나, 기존 문자열을 거꾸로 돌려서 뒤에서부터 차례대로 위치시켜야 하는 경우에 이 방법들을 사용하면 될 것 같습니다.

<목차>
1. 문자열 뒤집기 for 문
2. 문자열 뒤집기 reverse
3. 문자열 뒤집기 [::-1]

 

 

1. 반복문을 통해서 파이썬 문자열 뒤집기


for 반복문을 통해서 기존 문자열을 돌면서 작업해줄 수 있습니다.
기존 문자열의 문자들을 앞에서부터 하나씩 가지고 오면서

뒤집을 문자열을 넣을 문자열 변수에 하나씩 앞에 넣어주면 됩니다.

"abcd" 라는 문자열이 있다면
a, b, c, d 이런 식으로 for 반복문을 돌고
새 문자열 = a + 새 문자열('') 
새 문자열 = b + 새 문자열('a') 
새 문자열 = c + 새 문자열('ba')
새 문자열 = d + 새 문자열('cba')
이렇게 더 해주면 됩니다.

이걸 코드로 표현해주면 이렇게 되겠죠?

# for 반복문을 이용해서 문자열 뒤집기
name = "BlockDMask"
reverse_name = ''

for c in name:
    reverse_name = c + reverse_name

print(f'name    : {name}')
print(f'reverse : {reverse_name}')

변수 c 가 문자 하나하나 빼오는 것이고,
그렇게 빼온 문자를 새 문자열 앞에다 계속해서 더해주는(연결해주는) 것입니다.

 

 

2. 파이썬 리스트 reverse를 이용해서 문자열 뒤집기


문자열에는 reverse라는 메서드(함수)가 존재하지 않습니다.
그렇기 때문에 reverse를 이용하기 위해서 문자열을 리스트로 타입을 변환한 다음 reverse 함수를 이용해서
리스트로 변환한 문자열을 거꾸로(역순으로) 바꾸어 줄 수 있습니다.

그렇게 거꾸로 만든 리스트를 다시 join 함수를 이용해서 문자열로 만들어 주면 됩니다.

코드로 바로 볼까요

# 리스트의 reverse를 이용해서 문자열 뒤집기
name1 = "ab BlockDMask cd"
print(f'name1     : {name1}')

# 문자열을 리스트로
name_list = list(name1)  
print(f'name_list : {name_list}')

# 리스트 역순으로
name_list.reverse() 
print(f'name_list : {name_list}')

# 리스트를 문자열로
name2 = ''.join(name_list)
print(f'name2     : {name2}')

name1 은 문자열을 나타내고
첫 번째 name_list 출력은 기존 문자열을 리스트로 잘 변환한 것을 볼 수 있습니다.

name_list.reverse() 를 호출한 후에
두 번째 name_list 출력을 보면 리스트의 모든 요소들이 뒤집어진 것을 알 수 있습니다.

이렇게 뒤집어진 리스트를 ''.join(name_list)를 통해서 문자열로 변환해 줍니다.
name2를 보면 문자열이 거꾸로 되어서 출력되는 걸 볼 수 있습니다.

 

 

3. [::-1] 문자열 슬라이싱을 이용해서 파이썬 문자열 뒤집기


문자열 슬라이싱을 이용해서도 문자열을 역순으로 출력할 수 있습니다.

문자열[:] 을 하면 문자열[시작:끝] 과 같으며, 이것은 문자열을 앞에서부터 하나씩 슬라이싱 해서 새로운 문자열을 만드는 것입니다.

그리고 문자열[시작:끝:규칙]으로 세 번째 숫자가 들어갈 수 있는데, 이때의 규칙은 슬라이싱을 하는 규칙입니다.
여기에 1이 들어가는 것이 디폴트 값이며 1이 들어가게 되면 문자열을 앞에서부터 하나씩 잘라서 새로운 문자열을 만드는 것입니다.

2가 들어가게 되면 앞에서부터 한 칸씩 띄워서 2씩 잘라주어 새로운 문자열을 만들어 줍니다. 
인덱스를 기준으로 보면 [0], [2], [4] .. 이런 식으로 문자열을 자르게 됩니다.

우리는 이 규칙에 -1을 넣어서 뒤에서부터 잘라서 문자열을 뒤집을 수 있습니다.

이해를 돕기 위해 슬라이싱 예시도 같이 작성해 보았습니다.

name1 = "BlockDMask's blog"

name2 = name1[::1]
name3 = name1[::2]
name4 = name1[::-1]
name5 = name1[::-2]

print(f'name       : {name1}')
print(f'name[::1]  : {name2}')
print(f'name[::2]  : {name3}')
print(f'name[::-1] : {name4}') # 우리가 원하는 역순 출력
print(f'name[::-2] : {name5}')

 

name[::1]은 기존 name과 동일하게 문자열이 생성된 것을 볼 수 있습니다.

name[::2]는 name 문자열에서 한 칸씩 띄워져서 문자열이 생성된 것을 볼 수 있습니다.
앞부분만 살펴보자면 BlockDM 여기에서 B, o, k, M 순으로 
인덱스 순으로 보면 0, 2, 4, 6 이렇게 문자가 잘려서 작업이 되는 것을 볼 수 있습니다.

name[::-1]은 name 문자열에서 역순으로 하나씩 잘라서 문자열을 생성합니다.
인덱스를 기준으로 보면 name[-1] 자르고 name[-2] 자르고 name[-3] 자르고 ..
이런 식으로 문자열을 뒤에서부터 하나씩 잘라서 새롭게 문자열을 만들게 됩니다.

name[::-2]는 name 문자열에서 역순으로 하나씩 자르되 한 칸씩 띄워서 자르게 됩니다.
(인덱스 기준으로 2씩 차이 나게)

인덱스 기준으로 보면 name[-1] 자르고 name[-3] 자르고 name[-5] 자르고
이런식으로 자르게 됩니다.

 

 

이렇게 오늘은 파이썬에서 문자열을 거꾸로 뒤집는 3가지 방법에 대해서 알아보았습니다.
감사합니다.

반응형