문자열 인덱싱과 슬라이싱을 배우고 나면, 문자열을 부분적으로 접근하거나 조작할 때 사용하는 기본적인 능력을 획득할 수 있습니다.
문자열 인덱싱(Indexing)
문자열 인덱싱(Indexing)은 문자열에서 개별 문자에 접근하기 위해 인덱싱을 사용할 수 있습니다. 인덱스는 0부터 시작하며 문자열의 각 문자는 고유한 인덱스를 가집니다. "Hello" 문자열이 있다고 하면 다음과 같이 익덱스를 가지게 됩니다.
문자열 | H | e | l | l | o |
정방향 인덱스 | 0 | 1 | 2 | 3 | 4 |
역방향 인덱스 | -5 | -4 | -3 | -2 | -1 |
문자열 정방향 인덱싱
문자열 인덱싱의 정방향 같은 경우는 0부터 시작하여 문자열 길이보다 1개 작은 인덱스 값을 가집니다. 아래 예시 코드를 보면 Hello 문자열의 길이는 5이지만, 마지막 인덱스 값은 4입니다. 즉, o를 표현하는 인덱스 값은 4입니다. 그렇기 때문에 5 인덱스 값을 접근하게 되면 에러가 발생하게 되어 인덱스 값을 잘 작성해야 합니다.
str = "Hello"
print(str[0])
print(str[1])
print(str[2])
print(str[3])
print(str[4])
코드를 실행하면, 예상한 결과인 Hello 문자열이 한 문자씩 출력되는 것을 볼 수 있습니다.
문자열 역방향 인덱싱
문자열 인덱싱의 역방향 같은 경우는 문자열의 길이에서 하나 뺀 값의 인덱스를 -1로 시작합니다. 이번에도 Hello 문자열을 예시로 들어보겠습니다. 문자열 정방향 인덱싱인 경우에는 0 인덱스 값을 가졌는데, 문자열 역방향 인덱싱인 경우에 문자열의 길이의 음수값이 -5 인덱스 값을 가집니다. 그리고 순차적으로 하나씩 증가하여 마지막 o 문자열은 -1 인덱스 값을 가지게 됩니다. 그러면 왜 역방향 인덱싱 값이 있을까 생각해 볼 수 있을 것 같습니다. 역방향 인덱싱 값을 통해서 문자열의 길이를 계산하지 않고 바로 문자열 맨 마지막 문자를 접근할 수 있습니다. 이 부분은 문자열 슬라이싱을 할 때 잘 와닿으실 것이라 생각됩니다.
str = "Hello"
print(str[-5])
print(str[-4])
print(str[-3])
print(str[-2])
print(str[-1])
결과는 문자열 정방향 인덱싱과 같이 Hello 문자열이 한 문자씩 출력되는 것을 볼 수 있습니다.
문자열 슬라이싱(Slicing)
문자열 슬라이싱(Slicing)은 문자열에서 부분 문자열을 추출하는 방법입니다. 슬라이싱은 start에서부터 end-1 인덱스까지의 문자를 추출합니다. step을 쓸 경우에 step 값만큼 몇 개씩 건너뛰며 슬라이싱할지 결정할 수 있습니다.
str[start:end[:step]]
문자열 슬라이싱 예시
아무래도 설명보다는 문자열 슬라이싱 예시를 보시면 확 와닿으실 것 같습니다. 위에서 start와 end를 꼭 작성해야하는 것처럼 보였는데, 예시를 보면 start 또는 end 중에 하나는 생략해도 되는 것을 볼 수 있습니다. 생략이 되면 처음 또는 끝까지를 의미합니다. 또한 정방향 인덱스와 역방향 인덱스를 같이 써도 되는 것을 볼 수 있습니다.
str = "Hello, 77monkey"
print(str[:5]) #Hello
print(str[-6:]) #monkey
print(str[7:-6]) #77
결과는 주석으로 원했던 값과 동일하게 나옵니다.
그렇다면 혹시나 start와 end를 다 생략하면 어떻게 될까? 궁금하지 않으신가요? 답을 잘 생각해 보시면, start를 생략하면 처음부터, end를 생략하면 끝까지를 의미했기 때문에 전체 문자열이 출력됩니다.
str = "Hello, World"
print(str[:])
결과는 "Hello, World"가 나옵니다.
마지막으로 step 값을 지정하고 슬라이싱을 하게 되면 어떻게 될까요? 위에서 설명드렸듯이 step 값만큼 건너뛰게 됩니다. 직관적인 예시를 들어보겠습니다.
str = "12345"
print(str[::2])
print(str[1::2])
print(str[::-1])
첫 번째 print문에서는 135, 즉 홀수가 출력이 되었고, 두 번째 print문에서는 24, 즉 짝수가 출력이 되었습니다. 시작지점인 start를 기준으로 step만큼 뛰기 때문에 step 값이 2라도 결괏값이 다르게 출력이 됩니다.
역방향 인덱스를 사용하는 경우는 거의 없는데 가끔 역순으로 만들 때가 필요할 수 있습니다. 그럴 경우에 -1 step 값을 주어서 역순 출력을 할 수 있습니다.
마무리
문자열 인덱싱과 문자열 슬라이싱에 대해서 오늘 알아보았는데, 생각보다 조금 헷갈리실 수 있으실 것 같습니다. 양수만 있는 것이 아니라 음수도 쓸 수 있다는 점과 인덱싱 시작값이 0이라는 점이 헷갈릴 것 같습니다. 그렇지만 또 자주 쓰다 보면 금방 익숙해지기 때문에 예제 코드를 만들어보면서 익혀나가셨으면 좋겠습니다.
'개발 > python' 카테고리의 다른 글
[python] 리스트(List) 소개 (0) | 2024.09.20 |
---|---|
[python] 문자열 관련 함수 (0) | 2024.09.19 |
[python] 문자열 연산 (1) | 2024.09.17 |
[python] 데이터 타입 - 문자열 만들기 (0) | 2024.09.16 |
[python] 데이터 타입 - 숫자형 (0) | 2024.09.10 |