이번 시간에는 파이썬의 기초
문자열 자료형에 문자열 인덱싱과
슬라이싱에 대해 알아 보겠습니다.
문자열 인덱싱이란?
>>> a = "Life is too short, You need Python"
문자열 인덱싱은 위 코드에서
변수 a에 저장한 문자열의 각 문자마다
번호를 매겨 보면 다음과 같습니다.
Life is too short, You need Python
0 1 2 3
0123456789012345678901234567890123
"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]: ' ', ...
위 예에서 볼 수 있듯 a[번호]는
문자열 안의 특정한 값을 뽑아내는
역할을 담당합니다. 이러한 작업을
바로 인덱싱이라 합니다.
문자열 인덱싱 활용하기
인덱싱의 예에 대해 몇가지 살펴보면
>>> a = "Life is too short, Youn need Python"
>>> a[0]
'L'
>>> a[2]
'f'
>>> a[-5]
's'
앞의 a[0]과 a[2]는 쉽게 이해할 수 있으나
마지막 a[-1]이 뜻하는 것은 뭘까요?
바로 문자열을 뒤에서 부터 읽기 위해
마이너스(-) 기호를 붙이는 것 입니다.
즉 a[-5]는 뒤에서부터 세어 다섯 번째
가 되는 문자를 말합니다.
a의 값으로는 "Life is too short, You need Python"
문자열이므로 뒤에서부터 다섯 번째
문자열은 바로 'y'입니다.
뒤에서부터 첫번 째 문자열을 표시할 떄도
0부터 세어 "a[-0]이라고 해야할까?"
라는 의문이 들 수 있겠지만
자세히 생각해보면 0은 -0과 똑같은
수이기 때문에 a[-0]은 a[0]과 같은 값을 보여줍니다.
>>> a [-0]
'L'
계속해서 다음 몇가지를 보면
>>> a[-11]
'n'
>>> a[-14]
'o'
위 첫 번째 예는 뒤에부터 11번째
문자를 가리키고 두번째는
뒤에서부터 14번째 문자를
가리키는 것 입니다.
문자열 슬라이싱
그렇다면 "Life is too short, You need Python"의
문자열에서 단순히 한 문자만을
뽑아내는 것이 아닌 "Life" 또는 "You"같은
단어들을 뽑아내는 방법은 없을까요?
바로 아래처럼 하면 됩니다.
>>> a = "Life is too short, You need Python"
>>> b = a[8] + a[9] + a[10] + " " + a[12] + a[13] + a[14] + a[15] + a[16]
>>> b
"too short"
위 방법 처럼 단순히 접근할 수 있지만
파이썬에서는 더 좋은 방법을 제공하는데
그것이 바로 슬라이싱(Slicing) 기법입니다.
인덱싱 기법과 슬라이싱 기법은 리스트나 튜플 자료형에서도 사용 가능
위 예를 슬라이싱 기법으로 다음과 같이
더 간단히 처리할 수도 있습니다.
>>> a = "Life is too short, You need Python"
>>> print(a[0:4])
"Life"
a[0:4]이 뜻하는 것은 a문자열 문장에서
자리번호 0부터 4까지의 문자열을
뽑아낸다는 뜻입니다.
그러나 다음과 같이 의문이 발생하는데
a[0]은 L, a[1]은 i, a[2]는 f, a[3]는 e니까
a[0:3]으로도 Life단어를 뽑지 않을까?
다음 예제로 확인해보면
0 <= a < 3
이 수식을 만족하는 것은 a[0],[1],[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[19:34]
'You need Python'
a[시작 번호:끝 번호]에서 끝 번호 부분을
생략하면 시작 번호부터 그 문자열의
끝까지 뽑아냅니다.
>>> a[19:] ## You need Python
'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 = "20220127Snow"
>>> date = a[:8]
>>> weather = a[8:]
>>> date
'20220127'
>>> weather
'Snow'
위 예는 문자열 a를 두 부분으로 나누는
기법으로 숫자 8을 기준으로
문자열 a를 양쪽으로 한 번씩 슬라이싱
했고 a[:8]은 a[8]이 포함되지 않고
a[8:]은 a[8]을 포함했기 때문에 8을 기준으로
두 부분으로 나눌 수 있는 것 입니다.
위 예에서 "20220127Snow" 문자열을
날짜를 나타내는 부분인 "20220127"과
날씨를 나타내는 "Snow"로 나누는 방법을
보여줍니다.
위 문자열 "20220127Snow"를 연도 2022,
월과 일을 나타내는 0127, 날씨를 나타내는 Snow의
세 부분으로 나누기 위해 다음과 같이
입력하면 됩니다.
a = "20230127Snow"
year = a[:4]
day = a[4:8]
weather = a[8:]
print(year + " " + day + " " + weather) // 2023 0127 Snow
위 예는 숫자 4와 8로 "20230127Snow"문자열을
세 부분으로 나누는 방법을 보여줍니다.
지금까지 인덱싱과 슬라이싱에 대해 알아보았습니다.
인덱싱과 슬라이싱은 프로그래밍 시
매우 자주 사용하는 기법이니 잘 복습하시길
바랍니다.
참고 자료
'백엔드 > Python' 카테고리의 다른 글
[Python] 파이썬 3강 - 파이선 프로그래밍의 기초 , 자료형 - 문자열 자료형 - 1.문자열 연산하기 (0) | 2023.01.16 |
---|---|
[Python] 파이썬 2장 - 파이썬 프로그래미의 기초, 자료형 - 숫자형 (0) | 2023.01.02 |
[Python] 파이썬 1장 - 파이썬 설치하기 (0) | 2023.01.02 |