Python/파이썬 기초

파이썬 문자열 인덱싱, 슬라이싱 방법 총정리

jimmy_AI 2022. 9. 21. 23:12
반응형

python의 string 자료형에서 일부를 추출하는 인덱싱과 슬라이싱에 대하여

경우의 수를 총망라하여 이해하기 쉽게 정리해보도록 하겠습니다.

 

 

파이썬 문자열 인덱싱 방법

인덱싱은 문자열 전체에서 특정 위치에 해당하는 1글자만을 가져오는 과정을 의미합니다.

 

 

기본 인덱싱 방법

기본적으로 문자열[인덱스 위치 번호] 형태로 해당 위치의 글자를 가져오게 되는데

이 때 가장 앞 문자의 인덱스 번호는 0이 기준이 되는 점을 유의해주세요.

 

대표적인 문자열 인덱싱 예시는 아래와 같습니다.

a = "0123456789"
b = "hello world!"

# a의 1번째, 6번째 글자 인덱싱
print(a[0]) # '0'
print(a[5]) # '5'

# b의 2번째, 7번째 글자 인덱싱(공백도 자리에 포함됨에 유의)
print(b[1]) # 'e'
print(b[6]) # 'w'

 

 

음수 번호를 이용한 인덱싱 방법

마이너스 부호 인덱스 번호를 사용하여 뒤에서부터 인덱싱하는 것도 가능합니다.

이 때는 가장 뒤의 글자 번호는 -1이 기준이 됩니다.

 

음수 인덱스 번호를 사용한 예시는 다음과 같습니다.

a = "0123456789"
b = "hello world!"

# a문자열에서 맨 뒤와 뒤에서 2번째 글자 인덱싱
print(a[-1]) # '9'
print(a[-2]) # '8'

# b문자열에서 뒤에서 4번째 글자 인덱싱
print(b[-4]) # 'r'

 

반응형

 

파이썬 문자열 슬라이싱 방법

인덱싱과는 달리 슬라이싱은 시작과 끝 위치를 모두 지정하여 1글자보다 더 긴 길이의

부분 문자열도 추출 가능한 방법입니다.

 

 

기본 슬라이싱 방법 : 문자열[시작 번호:끝 번호]

인덱싱과 마찬가지로 0부터 시작하는 인덱스 번호로 위치를 지정해주시면 되는데,

이 때 문자열[시작 번호:끝 번호] 형태로 시작과 끝 위치를 모두 지정해주시면 됩니다.

단, 끝 번호에 해당하는 인덱스 위치의 문자는 포함되지 않습니다.

 

뒤에서 부터 위치를 셈하는 음수 인덱스 번호도 마찬가지로 사용이 가능하며,

시작 번호 혹은 끝 번호 생략시에는 각각 맨처음부터와 맨끝까지를 의미합니다.

a = "0123456789"
b = "hello world!"

# 1 ~ 3번 인덱스 번호, 2 ~ -3번 인덱스 번호에 해당하는 부분 문자열 슬라이싱
print(a[1:4]) # '123'
print(a[2:-2]) # '234567'

# 처음 ~ 1번 인덱스 번호, -4번 ~ 끝 인덱스 번호, 문자열 전체 부분에 대한 슬라이싱
print(b[:2]) # 'he'
print(b[-4:]) # 'rid!'
print(b[:]) # 'hello world!'

 

 

심화 슬라이싱 방법1 : 문자열[시작 번호:끝 번호:step]

위의 방법에서 몇 칸씩 전진 혹은 후진할지를 정하는 step 크기를 같이 지정할 수 있습니다.

 

예를 들면, [1:8:2]는 1번 부터 시작하여 2칸씩 8번의 바로 앞(7번)까지 슬라이싱하는 경우를

의미하며, step이 음수인 경우는 역방향으로 슬라이싱이 진행됨을 의미합니다.

(step = -1이면 1칸씩 뒤에서 앞으로, -2이면 2칸씩 뒤에서 앞으로 가는 상황을 의미합니다.)

 

해당 방법으로 슬라이싱을 진행한 대표적인 예시는 다음과 같습니다.

a = "0123456789"
b = "hello world!"

# 1번부터 8번 바로 앞(7번)까지 2칸씩, -1번부터 6번 바로 뒤(7번)까지 -1칸씩 슬라이싱
print(a[1:8:2]) # '1357'
print(a[-1:6:-1]) # '987'

# 처음부터 7번 바로 앞(6번)까지 3칸씩, -1번부터 -5번 바로 뒤(-4번)까지 -2칸씩 슬라이싱
print(b[:7:3]) # 'hlw'
print(b[-1:-5:-2]) # '!l'

 

 

심화 슬라이싱 방법2 : 문자열[시작 번호::step]

사실 이 방법은 심화 방법 1번에서 끝 번호를 생략한 경우로,

시작 번호부터 step 크기씩 전진하며 끝에 도달할 때까지 슬라이싱이 진행됩니다.

(마찬가지로, step이 음수인 경우는 후진하며 처음 위치에 도달할 때까지 슬라이싱됩니다.)

a = "0123456789"
b = "hello world!"

# 1번 인덱스부터 2글자씩, 처음 위치부터 3글자씩 전진하며 슬라이싱
print(a[1::2]) # '13579'
print(a[::3]) # '0369'

# 끝 위치부터 1글자씩, 4번 인덱스부터 2글자씩 후진하며 슬라이싱
print(b[::-1]) # '!dlrow olleh'
print(b[4::-2]) # 'olh'