본문 바로가기
카테고리 없음

파이썬 문자열(String) 다루기: 인덱싱과 슬라이싱의 개념 쉽게 이해하기

by jbparkbill 2025. 11. 29.
반응형

지난 포스팅에서는 숫자를 다루는 정수형(int)과 실수형(float)에 대해 알아보았습니다. 숫자가 컴퓨터 연산의 기초라면, 문자열(String)은 우리가 보고 읽는 정보의 대부분을 차지하는 핵심 데이터입니다.

우리가 매일 사용하는 카카오톡 메시지, 이 블로그의 글, 웹사이트의 주소(URL)까지 모든 것이 '문자열'로 이루어져 있습니다. 따라서 프로그래밍을 잘한다는 것은 곧 "텍스트 데이터를 내 마음대로 자르고, 붙이고, 가공하는 능력"이 뛰어나다는 뜻과 같습니다.

파이썬은 타 언어(C, Java)에 비해 문자열을 다루는 능력이 압도적으로 강력하고 직관적입니다. 이번 글에서는 파이썬 문자열 처리의 양대 산맥인 인덱싱(Indexing)슬라이싱(Slicing)에 대해 완벽하게 정리해 드리겠습니다. 이 글을 다 읽으시면 주민등록번호에서 성별을 추출하거나, 긴 문장에서 특정 단어만 뽑아내는 일을 식은 죽 먹기처럼 하실 수 있게 됩니다.

파이썬 문자열 인덱싱 & 슬라이싱 완벽 가이드 HTML 코드
파이썬 문자열 인덱싱 & 슬라이싱 완벽 가이드 HTML 코드

1. 문자열(String)이란 무엇인가?

문자열은 문자(Character)들의 나열(Sequence)이라는 뜻입니다. 파이썬에서는 데이터를 큰따옴표(")나 작은따옴표(')로 감싸서 문자열임을 표시합니다.

text1 = "Hello Python"
text2 = '12345'  # 숫자에 따옴표를 붙이면 문자가 됩니다.

여기서 중요한 점은, 파이썬 입장에서 문자열은 단순히 한 덩어리의 데이터가 아니라, '순서가 있는 문자들의 집합'이라는 사실입니다. 순서가 있다는 것은 각 문자마다 고유한 번호가 매겨져 있다는 뜻이며, 우리는 이 번호를 이용해 문자열을 마음대로 조종할 수 있습니다.

2. 콕 집어내기: 인덱싱(Indexing)

인덱싱(Indexing)은 말 그대로 '무언가를 가리킨다(Index)'는 뜻입니다. 문자열 속에서 내가 원하는 특정 문자 하나를 콕 집어내고 싶을 때 사용합니다.

(1) 컴퓨터는 0부터 센다 (Zero-based Numbering)

프로그래밍을 처음 접할 때 가장 적응하기 힘든 규칙입니다. 우리는 첫 번째를 '1번'이라고 부르지만, 컴퓨터는 '0번'부터 숫자를 셉니다. 이를 인덱스(Index)라고 부릅니다.

word = "Python"

word 변수에서 각 글자의 주소는 다음과 같습니다.

  • P : 0번
  • y : 1번
  • t : 2번
  • h : 3번
  • o : 4번
  • n : 5번

따라서 'P'를 꺼내고 싶다면 대괄호 [] 안에 번호를 적어주면 됩니다.

print(word[0])  # 결과: P
print(word[3])  # 결과: h

(2) 파이썬만의 마법: 마이너스(-) 인덱싱

다른 언어에는 없는 파이썬만의 강력한 기능입니다. 만약 문자열이 엄청나게 길어서 끝 번호를 알기 어렵다면 어떻게 맨 마지막 글자를 가져올까요? 파이썬에서는 뒤에서부터 셀 때는 마이너스(-)를 사용합니다.

  • word [-1] : 뒤에서 첫 번째 (가장 마지막 글자 'n')
  • word [-2] : 뒤에서 두 번째 ('o')
print(word[-1]) # 결과: n

이 기능 덕분에 문자열의 길이를 몰라도 마지막 글자를 쉽게 추출할 수 있습니다.

3. 싹둑 잘라내기: 슬라이싱(Slicing)

인덱싱이 문자 '하나'를 뽑는 것이라면, 슬라이싱은 '범위를 지정해서 통째로 잘라내는 것'입니다. 식빵을 슬라이스(Slice)해서 자르는 것을 상상하시면 됩니다.

(1) 슬라이싱 기본 문법

대괄호 안에 콜론(:)을 사용하여 범위를 지정합니다.

변수명[시작번호 : 끝번호]

(2) ★가장 중요한 규칙: "끝 번호는 포함하지 않는다"

초보자가 가장 많이 틀리는 부분입니다. 파이썬의 슬라이싱 범위는 '시작 번호 이상, 끝 번호 미만'입니다. 즉, 끝 번호 바로 앞까지만 가져옵니다.

word = "Python"
print(word[0:2])

위 코드의 결과는 무엇일까요? 'P', 'y', 't'까지 나올 것 같지만, 실제로는 0번과 1번인 'Py'만 출력됩니다. 2번인 't'는 포함되지 않습니다.

Tip: word [0:2]는 "0번부터 시작해서 2개를 가져와라"라고 이해하면 헷갈리지 않습니다. (2 - 0 = 2개)

(3) 시작과 끝 생략하기

콜론 앞뒤의 숫자를 생략하면 "처음부터" 또는 "끝까지"라는 의미가 됩니다.

  • word [:3] : 처음(0)부터 3번 미만까지 (Pyth)
  • word [3:] : 3번부터 끝까지 (hon)
  • word [:] : 처음부터 끝까지 (복사할 때 자주 씀)

4. 고급 기술: 간격(Step) 설정하기

슬라이싱에는 숨겨진 세 번째 옵션이 있습니다. 바로 몇 칸씩 건너뛸지를 정하는 '간격(Step)'입니다.

변수명[시작 : 끝 : 간격]
number = "123456789"
print(number[::2])  # 처음부터 끝까지 2칸씩 점프 -> "13579" (홀수만 추출)

특급 비기: 문자열 뒤집기

간격에 -1을 넣으면 어떻게 될까요? 거꾸로 한 칸씩 간다는 뜻이 되어, 문자열이 완전히 뒤집힙니다.

print(number[::-1]) # 결과: "987654321"

이 코드는 알고리즘 테스트(코딩 테스트)에서도 자주 사용되는 꿀팁입니다.

5. 주의사항: 문자열은 수정할 수 없다 (Immutable)

마지막으로 조금 어려운 이야기를 해보겠습니다. 인덱싱으로 문자를 꺼낼 수는 있지만, 인덱싱으로 문자를 바꿀 수는 없습니다.

word = "Python"
word[0] = "J"  # 'P'를 'J'로 바꾸고 싶다! -> 에러(Error) 발생!

위 코드를 실행하면 TypeError가 발생합니다. 파이썬에서 문자열은 한 번 생성되면 그 내용을 변경할 수 없는 '불변(Immutable) 객체'이기 때문입니다.

수정하고 싶다면 어떻게 해야 할까요? 기존 문자열을 고치는 게 아니라, 슬라이싱을 이용해 새로운 문자열을 조합해서 만들어야 합니다.

word = "Python"
new_word = "J" + word[1:]  # "J" + "ython"
print(new_word)  # 결과: "Jython"

6. 결론: 데이터를 다루는 칼, 슬라이싱

오늘은 파이썬 문자열 처리의 기초이자 핵심인 인덱싱과 슬라이싱에 대해 깊이 있게 알아보았습니다. 정리하자면 다음과 같습니다.

  1. 인덱싱: 0번부터 시작하며, -1은 맨 뒤를 의미한다.
  2. 슬라이싱: [시작:끝] 형태이며, 끝 번호는 포함되지 않는다.
  3. 불변성: 문자열의 일부를 직접 수정할 수는 없다.

이 개념만 확실히 잡아도 여러분은 이미 데이터를 가공할 수 있는 훌륭한 도구를 손에 넣은 셈입니다. 다음 포스팅에서는 문자열 안에 변수를 예쁘게 집어넣는 기술, '문자열 포맷팅(Formatting)의 3가지 방법(f-string 등)'에 대해 자세히 소개하겠습니다. 이 기능까지 익히면 문자열 처리는 마스터했다고 보셔도 좋습니다.

반응형