-
chapter02-2 문자열 자료형(문자열 인덱싱과 슬라이싱)점프 투 파이썬 2021. 9. 4. 05:05
문자열 인덱싱과 슬라이싱
인덱싱이란 무엇인가를 '가리킨다'는 의미이고, 슬라이싱은 무엇인가를 '잘라낸다'는 의미이다.
이런 의미를 생각하면서 다음 내용을 살펴보다.
문자열 인덱싱이란?
a="Life is too short, You need Python" 위 소스 코드에서 변수 a에 저장한 문자열의 각 문자마다 번호를 매겨 보면 다음과 같다.
L i f e i s t o o s h o r t , Y o u n e e d P y t h o n 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 "Life is too short, You need Python" 문자열에서 L은 첫 번째 자리를 뜻하는 숫자0, 바로 다음인 i는 1 이런 식으로 계속 번호를 붙인 것이다. 중간에 있는 short의 s는 12가 된다.
이제 다음 예를 실행해 보자.
a="Life is too short, You need Python"
a[3]
'e'a[3]이 뜻하는 것은 a라는 문자열의 네 번째 문자 e를 말한다. 프로그래밍을 처음 접하는 독자라면 a[3]에서 숫자 3이 왜 네 번째 문자를 뜻하는지 의아할 수도 있다. 사실 이 부분이 헷갈릴 수 있는 부분인데, 이렇게 생각하면 쉽게 알 수 있을 것이다.
"파이썬은 0부터 숫자를 센다."
따라서 파이썬은 위 문자열을 다음과 같이 바라보고 있다.
a[0]:'L', a[1]:'i', a[2]:'f', a[3]:'e', a[4]:' ',...... 0부터 숫자를 센다는 것이 처음에는 익숙하지 않겠지만 계속 사용하다 보면 자연스러워 질 것이다. 위 예에서 볼 수 있듯이 a[번호]는 문자열 안의 특정한 값을 봅아내는 역할을 한다. 이러한 작업을 인덱싱이라고 한다.
문자열 인덱싱 활용하기
인덱신 예를 몇 가지 더 보자.
a="Life is too short, You need Python"
a[0]
'L'
a[12]
's'
a[-1]
'n'앞의 a[0]과 a[12]는 쉽게 이해할 수 있는데 마지막의 a[-1]이 뜻하는 것은 뭘까? 눈치 빠른 독자는 이미 알아챘겠지만 문자열을 뒤에서부터 읽기 위해 마이너스(-) 기호를 붙이는 것이다. 즉 a[-1]은 뒤에서부터 세어 첫 번째가 되는 문자를 말한다. a의 값은 "Life is too short, You need Python" 문자열이므로 뒤에서부터 첫 번째 문자는 가장 마지막 문자'n'이다.
뒤에서부터 첫 번째 문자를 표시할 때도 0부터 세어 'a[-0]이라고 해야 하지 않을까?' 라는 의문이 들 수도 있겠지만 잘 생각해 보자. 0과 -0은 똑같은 것이기 때문에 a[-0]음 a[0]과 똑같은 값을 보여준다.
a[-0]
'L'계속해서 몇 가지 예를 더 보자.
a[-2]
'o'
a[-5]
'y'위 첫 번째 예는 뒤에서부터 두 번째 문자를 가리키는 것이고, 두 번째 예는 뒤에서부터 다섯 번째 문자를 가리키는 것이다.
문자열 슬라이싱이란?
그렇다면 "Life is too short, You need Python" 문자열에서 단순히 한 문자만을 뽑아내는 것이 아니라 'Life' 또는 'You'
같은 단어를 뽑아내는 방법은 없을까?
다음과 같이 하면 된다.
a="Life is too short, You need Python"
b=a[0]+a[1]+a[2]+a[3]
b
'Life'위 방법처럼 단순하게 접근할 수도 있지만 파이썬에서는 더 좋은 방법을 제공한다. 바로 슬라이싱 기법이다. 위 예는 슬라이싱 기법으로 다음과 같이 간단하게 처리할 수 있다.
a="Life is too short, You need Python"
a[0:4]
'Life'a[0:4]가 뜻하는 것은 a 문자열, 즉 "Life is too short, You need Python" 문장에서 자리 번호 0부터 4까지의 문자를 뽑아낸다는 뜻이다.
하지만 다음과 같은 의문이 생길 것이다. a[0]은 L, a[1]은 i, a[2]는 f, a[3]은 e니까 a[0:3]으로도 Life라는 단어를 뽑아낼 수 있지 않을까? 다음 예로 확인해보자.
a[0:3]
'Lif'이렇게 되는 이유는 간단하다. 슬라이싱 기법으로 a[시작 번호:끝 번호]를 지정할 때 끝 번호에 해당하는 것은 포함하지 않기 때문이다. a[0:3]을 수식으로 나타내면 다음과 같다.
0<=a<3 이 수식을 만족하는 것은 a[0], a[1], a[2]이다. 따라서 a[0:3]은 'Lif'이고 a[0:4]는 'Life'가 되는 것이다. 이 부분이 문자열 연산에서 가장 혼동하기 쉬운 부분이니 장 마지막의 연습 문제를 많이 풀어 보면서 몸에 익히기 바란다.
문자열을 슬라이싱 하는 방법
슬라이싱의 예를 조금 더 보자.
a[0:5]
'Life '위 예는 a[0]+a[1]+a[2]+a[3]+a[4]와 동일하다. a[4]는 공백 문자이기 때문에 'Life'가 아닌 'Life ' 가 출력된다. 공백 문자 역시 L, i, f, e 같은 문자와 동일하게 취급되는 것을 잊지 말자. 'Life'와 'Life '는 완전히 다른 문자열이다.
슬라이싱할 때 항상 시작 번호가 0일 필요는 없다.
a[0:2]
'Li'
a[5:7]
'is'
a[12:17]
'short'a[시작 번호:끝 번호]에서 끝 번호 부분을 생략하면 시작 번호부터 그 문자열의 끝까지 뽑아낸다.
a[19:]
'You need Python'a[시작 번호:끝 번호]에서 시작 번호를 생략하면 문자열의 처음부터 끝 번호까지 뽑아낸다.
a[:17]
'Life is too short'a[시작 번호:끝 번호]에서 시작 번호와 끝 번호를 생략하면 문자열의 처음부터 끝까지를 뽑아낸다.
a[:]
'Life is too short, You need Python'슬라이싱에서도 인덱싱과 마찬가지로 마이너스(-)기호를 사용할 수 있다.
a[19:-7]
'You need'위 소스 코드에서 a[19:-7]이 뜻하는 것은 a[19]에서부터 a[-8]까지를 말한다. 이 역시 a[-7]은 포함하지 않는다.
슬라이싱으로 문자열 나누기
다음은 자주 사용하게 되는 슬라이싱 기법 중 하나이다.
a="20010331Rainy"
date=a[:8]
weather=a[8:]
date
'20010331'
weather
'Rainy'위 예는 문자열a를 두 부분으로 나누는 기법이다. 숫자 8을 기준으로 문자열 a를 양쪽으로 한번씩 슬라이싱했다.
a[:8]은 a[8]이 포함되지 않고, a[8:]은 a[8]을 포함하기 떄문에 8을 기준으로 해서 두부분으로 나눌 수 있는 것이다.
위 예에서는 "20010331Rainy" 문자열을 날짜를 나타내는 부분인 '20010331'과 날씨를 나타내는 부분인 'Rainy'로 나누는 방법을 보여준다.
위 문자열 "20010331Rainy"를 연도 2001, 월과 일을 나타내는 0331, 날씨를 나타내는Rainy의 세 부분으로 나누려면 다음과 같이 할 수 있다.
a="20010331Rainy
year=a[:4]
day=a[4:8]
weather[8:]
year
'2001'
day
'0331
weather
'Rainy'위 예는 숫자 4와 8로 "20010331Rainy" 문자열을 세 부분으로 나누는 방법을 보여준다.
지금까지 인덱싱과 슬라이싱에 대해서 살펴보았다. 인덱싱과 슬라이싱은 프로그래밍을 할때 매우 자주 사용하는 기법이니 꼭 반복해서 연습해 두자.
출처 : "점프투파이썬"
'점프 투 파이썬' 카테고리의 다른 글
chapter02-3 리스트 자료형 (0) 2021.09.06 chapter02-2 문자열 자료형(문자열 포매팅, 문자열 관련함수) (0) 2021.09.06 chapter02-2 문자열 자료형(문자열 연산하기) (0) 2021.09.04 chapter02-2 문자열 자료형 (0) 2021.09.04 chapter 02-1 숫자형 (0) 2021.09.03