본문 바로가기

파이썬/사용법

[python] 문자열 슬라이싱 인덱싱 [문자열 추출하기]

 슬라이싱인덱싱을 통해 문자열의 일부를 추출하고 활용하는 방법

안녕하세요! 이번 글에서는 문자열 슬라이싱, 인덱싱에 대해 알아보겠습니다

문자열 슬라이싱, 인덱싱에 대한 내용을 다룰 예정입니다.

 

1)  문자열 슬라이싱과 인덱싱

문자열 슬라이싱인덱싱은 문자열에서 일부분을 추출하는 방법입니다.

인덱싱은 대괄호('[]')안에 원하는 문자열의 순서(인덱스)를 넣어 사용합니다.

슬라이싱은 대괄호('[]') 안에 시작 인덱스와 끝 인덱스를 콜론(':')으로 구분하여 사용합니다.

시작 인덱스는 포함되고 끝 인덱스는 포함하지않습니다.

 

>>> test_string = 'python' # 문자열 변수 생성
>>> test_string[0] # 변수의 0번째 문자를 추출
'p'
>>> test_string[1] # 변수의 1번째 문자를 추출
'y'
>>> test_string[2] # 변수의 2번째 문자를 추출
't'
>>> test_string[0:4] # 변수 0번째 부터 4번째 전까지 추출
'pyth'

이상한 짓) 음수인덱싱, 슬라이싱 하면 어떻게 될까 ?

>>> test_string = 'python'
>>> test_string[-3] # 
'h'
>>> test_string[-1] # 
'n'
>>> test_string[-0] # -0은 0번째로 인식한다.
'p'
>>> test_string[0] # 0번쨰 스트링
'p'
>>> test_string[:] # 콜론만 사용하면 모두 가져온다
'python'
>>> test_string[-4:-1] # -4번째 = 2번째 -1번째 = 5번째 즉 2번째 부터 5번째 까지
'tho'
>>> test_string[-0:-1]
'pytho'
>>> test_string[-3:-4] # -3이 -4보다 순서가 뒤에있기 때문에 리턴을 하지않음 
''
>>> test_string[0:-0]# 0이 -0보다 뒷순서기 때문에 리턴을 하지않음
''
>>> test_string[-0:0] # 얘도 리턴 안한다. [머지?]
''
>>> test_string[-6:]
'python'
>>> test_string[-6:]
'python'
>>> test_string[4:51] # 범위를 벗어난 경우라도 정상적으로 출력됨
'on'
# [자동으로 문자열 크기 인식해서 끝까지 가는 구나 라고 대충 알아듣고 리턴해준다.]

 

컴퓨터는 0부터 시작한다는 개념을 박아놓고 시작한 저는 -0을 인덱싱 할 때 

제일 뒤에 있는 문자는 -0번째가 아닌가 ? 하는 생각이 들었습니다.

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

 

이런식으로 문자열과 순서를 도식화해서 0부터 시작-> 문자열 크기(6) 까지 있다고 생각한 후

양수는 차례차례 접근하지만

음수는 양수로 변환하여 계산하는 것이 저의 방법입니다. string크기 - |index|  (글자 수) - (순서 절대값)

 

인덱싱은 순서대로 접근 음수는 양수로 변환한다.

"python" 으로 예시를 들면

크기는 6이고 [-2] 에 접근 한다 할 때 [6 - |-2| = 4] 4번째 문자를 가져온다.

 

슬라이싱은 시작점에서부터 범위의 차 만큼 문자를 가져온다.

예시) str[3:5]  3부터 시작하고 [5 - 3 = 2]  -> 문자 2개 가져온다

 

음수일 때는 음수를 양수로 변형해서 이해하자.

예시) str[-5:-1] = [6 - |5| = 1 ] ~ [6 - |1| = 5] -> 1 ~ 5 1부터 시작 [5-1 = 4] 1번째 순서부터 문자 4개 가져온다.

 

알아낸 사실

1)  test_string[-3:-4] 처럼 콜론 앞의 숫자가 더 앞순서가 아닌경우 빈 문자열을 반환합니다.. -3 == 3 -4 == 2

2) 그냥 test_string[0:] 이런식으로 하면 0번째 부터 끝까지 가져옵니다. [거꾸로해도 무방합니다.]

3) test_string[:] 이런식으로 하면 모두 가져옵니다.[이럴거면 그냥 test_string 출력할 듯]

4) 슬라이싱 할 때 범위를 벗어나면 자동으로 끝범위 까지 센스있게 가져옵니다

5) 인덱싱 할 때는 범위를 벗어나면 indexError를 발생시킵니다.

 

2) 슬라이싱 간격 설정

슬라이싱 시에 스텝을 설정하여 일정한 간격으로 문자열을 추출할 수도 있습니다.

>>> test_string = '0123456789'
>>> test_string[::1]
'0123456789'
>>> test_string[::2]
'02468'
>>> test_string[::3]
'0369'
>>> test_string[::4]
'048'
>>> test_string[::5]
'05'
>>> test_string[::-1]
'9876543210'
>>> test_string[::-2]
'97531'
>>> test_string[::-3]
'9630'
>>> test_string[::-4]
'951'
>>> test_string[::-5]
'94'

step에서  -1한 것이  간격이라고 생각하는 것이 편합니다.

step = 1 일 때 시작부터 출력 간격이 없다 -> [1 - 1 = 0] 0개 건너 뛰는 구나 
step = 2 일 때 처음 인덱스 부터 출력 하고 간격은 1개 건너 뛴다. 0 1 2 3 4 5 6 7 8 -> [2 - 1 = 1] 1개 건너 뛴다 

step = 3 일 때 처음 인덱스 부터 출력 하고 간격은 2개 건너 뛴다. 0 1 2 3 4 5 6 7 8 9 -> [3 - 1 = 2] 2개 건너 뛴다 

step을 음수로 하면 반대로 출력합니다.

반대로 출력하고 싶을 때 str[::-1] 이런식으로 하면 빠르게 반대로 뒤집어서 추출 가능합니다. .


정리)

파이썬 문자열을 추출 하는 방법은 2가지가 있다.

인덱싱 -> 한글자를 가져오고 싶을 때 문자열[순서] 형식으로 사용한다.

슬라이싱 -> 여러글자를 가져오고 싶을 때 문자열[a:b]  형식으로 사용한다. (a<b)

 

마치면서)

이로써 파이썬 문자열 인덱싱, 슬라이싱에 대한 내용을 마치겠습니다. 
다음 글에서도 유용한 파이썬 팁과 기능을 소개하도록 하겠습니다.

감사합니다.

 

문자열안에 변수를 넣고 출력하는 방법을 알고싶다면?

[파이썬/사용법] - [python] 파이썬 문자열 포맷팅 -> 쉽고 강력한 문자열 형식화

 

문자열 메서드 정리

[파이썬/사용법] - [python] 문자열 메서드 -> 적재적소에 사용하기