파이썬에서 문자열을 다룰 때 가장 중요한 것은 문자열 슬라이싱이다.
코딩테스트에도 문자열을 다루는 문제가 나오기 때문에 해당 개념을 머릿속에 잘 정리해 가는 것은 필수적이다.
문자열 슬라이싱은 파이썬에서만 지원해주는 특별한 기능인데, 말 그대로 문자열을 내가 원하는 범위로 잘라서 표현할 수 있게 해주는 것이다. 또한, 파이썬에서 문자열을 다룰 때 리스트나, 데크(Deque)를 사용하는 것보다 문자열 슬라이싱 기능을 사용하는 것이 속도 측면에서도 가장 빠르다.
지금시간은한시
파이썬에서 문자열(str)은 불변 시퀀스 객체에 속한다. 즉, 불변 리스트로 봐주면 이해가 쉬울 듯하다. 아래는 직관적으로 문자열을 리스트로 작성해보았다.
[ '지', '금', '시', '간', '은', '한', '시' ]
0 1 2 3 4 5 6
-7 -6 -5 -4 -3 -2 -1
이렇게 리스트로 보여준 이유는 인덱스(Index)를 설명하기 위해서이다. 인덱스는 문자열을 지정할 때 사용하는 것으로, 각 문자에 번호를 매긴다고 생각하면 된다. 인덱스는 왼쪽 기준으로 무조건 0부터 시작하기 때문에 n자 문자열에 대해 0부터 n-1의 인덱스를 가지게 된다. 따라서 만약 '지금시간은한시' 라는 문자열을 변수 s로 선언했다면, s[0] = '지' , s[6] = '시' 가 될 것이다. 또한, 오른쪽을 기준으로도 인덱스를 지정할 수 있는데, 이때는 -1부터 시작하여 왼쪽으로 갈수록 -1씩 작아진다. 즉. s[-1] = '시', s[-7] = '지' 가 된다.
문자열 슬라이싱은 이 인덱스를 활용하여 자유자재로 문자열을 쪼갤 수 있다.
s[0:3] == '지금시' # 인덱스 3은 포함하지 않음
s[2:] == '시간은한시' # 인덱스 2부터 끝까지
s[:2] == '지금' # 처음부터 인덱스 1까지
s[1:-3] == '금시간' # 인덱스 1부터 인덱스 -4(=3)까지 / 인덱스 -3은 포함하지 않음
s[:] == '지금시간은한시' # 문자열의 복사본 생성
s[::1] == '지금시간은한시' # 문자열의 복사본 생성 1은 디폴트값
s[::-1] == '시한은간시금지' # 문자열 reverse
s[1:6:2] == '금간한' # 인덱스 1부터 인덱스 5에서 두 칸씩 띄우기
s[::2] == '지시은시' # 문자열 전체 기준 두 칸씩 띄우기
문자열 슬라이싱의 기능 중, 문자열 reverse나 문자열 복사본 생성은 매우 유용하게 쓰일 수 있다.