백엔드/Python

[Python] 파이썬 4강 - 파이썬 프로그래밍의 기초, 자료형 - 문자열 자료형 - 2.문자열 인덱싱과 슬라이싱

Koras02 2023. 1. 27. 21:27

이번 시간에는 파이썬의 기초

문자열 자료형에 문자열 인덱싱과

슬라이싱에 대해 알아 보겠습니다.

 

문자열 인덱싱이란?

>>> 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"문자열을 

세 부분으로 나누는 방법을 보여줍니다.

 

지금까지 인덱싱과 슬라이싱에 대해 알아보았습니다.

인덱싱과 슬라이싱은 프로그래밍 시 

 

매우 자주 사용하는 기법이니 잘 복습하시길 

바랍니다.


참고 자료

 

02-2 문자열 자료형

`[추천 동영상 강의]` : [https://www.youtube.com/watch?v=STGCSIt3nsE](https://www.youtube.com/watch?v=STGCS…

wikidocs.net

 

GitHub - Koras02/welcomto-py

Contribute to Koras02/welcomto-py development by creating an account on GitHub.

github.com