IT프로그래밍/파이썬

파이썬 문자열 기초 : 글자는 왜 0번부터 셀까

MannizDev 2026. 8. 9.

요즘 파이썬을 오래 안 본 탓에 기초부터 다시 공부하고 있습니다. 예전 코드를 열어 보니 text[0], name[:3] 같은 표현은 익숙한데, 막상 “왜 첫 글자가 0번이지?”라고 묻자 잠깐 멈추게 되었습니다.

문자열을 단순히 따옴표 안의 글이라고 외우면 인덱스와 슬라이싱이 각각 새로운 문법처럼 보입니다. 하지만 문자열을 글자가 순서대로 놓인 줄이라고 생각하면 0, 대괄호, len()이 한 원리로 연결됩니다. 이번 글에서는 메뉴 이름과 주문 번호를 잘라 보며 그 원리를 확인합니다.

파이썬 문자열의 글자마다 0부터 위치 번호를 붙여 인덱스 원리를 보여 주는 대표 이미지

 

테스트 환경

  • 작성 및 실행 확인일 : 2026년 8월 9일
  • 운영체제 : Windows
  • 로컬 실행 환경 : Python 3.9.13
  • 공식 문서 확인 : Python 3.14.6 문자열과 시퀀스 문서

예제는 Python 3의 기본 문자열 기능만 사용합니다. 버전에 따라 달라지는 외부 라이브러리는 없습니다.

숫자 10과 문자열 "10"의 차이가 아직 낯설다면 파이썬 자료형 기초를 먼저 읽어도 좋습니다.

 

따옴표는 글자의 시작과 끝을 알려 준다

Python은 따옴표 안의 값을 문자열, 즉 str로 다룹니다.

word = "Python"
number_text = "2026"

print(word, type(word))
print(number_text, type(number_text))

실행 결과입니다.

Python <class 'str'>
2026 <class 'str'>

"2026"은 숫자처럼 보이지만 따옴표 안에 있으므로 네 글자로 이루어진 문자열입니다. 주문 번호나 전화번호처럼 계산하지 않고 읽고 나눌 값이라면 숫자 모양이어도 문자열이 자연스럽습니다.

따옴표는 화면에 함께 출력할 장식이 아닙니다. Python에게 여기부터 여기까지를 하나의 글자 묶음으로 보라고 알려 주는 경계선입니다.

 

문자열은 글자가 줄을 선 시퀀스다

"파이썬라떼"를 한 덩어리로만 보지 말고 글자들이 차례로 줄을 섰다고 생각해 보겠습니다.

글자      파   이   썬   라   떼
위치      0    1    2    3    4

순서가 있는 값의 모음을 Python에서는 시퀀스라고 부릅니다. 문자열도 시퀀스이므로 각 글자에는 위치 번호가 있습니다. 이 위치 번호가 인덱스입니다.

 

왜 첫 글자는 1번이 아니라 0번일까

인덱스는 “몇 번째 글자인가?”보다 시작점에서 몇 칸 떨어졌는가?로 읽으면 쉽습니다. 첫 글자는 시작점에서 0칸 떨어져 있으므로 인덱스가 0입니다. 다음 글자는 1칸 떨어져 있으니 1입니다.

처음에는 일상적인 순서와 달라 어색하지만, “첫 번째 글자”와 “0칸 떨어진 글자”를 구분하면 실수가 줄어듭니다.

 

대괄호로 한 글자를 꺼내기

문자열 뒤에 대괄호를 붙이고 인덱스를 쓰면 그 위치의 글자를 얻습니다.

menu = "파이썬라떼"

print(menu[0])
print(menu[1])
print(menu[-1])
print(len(menu))
파
이
떼
5

menu[0]은 첫 글자 "파", menu[1]은 다음 글자 "이"입니다. 음수 인덱스는 뒤에서부터 찾습니다. -1은 마지막 글자, -2는 끝에서 두 번째 글자입니다.

len(menu)은 문자열의 길이, 즉 글자 수 5를 돌려줍니다. 인덱스는 0부터 시작하므로 길이가 5인 문자열의 마지막 양수 인덱스는 4입니다. 길이와 마지막 인덱스는 같은 숫자가 아닙니다.

 

콜론으로 필요한 구간 잘라 보기

한 글자가 아니라 연속된 여러 글자가 필요하면 슬라이싱을 사용합니다.

order_code = "PY-2026-0810"

print(order_code[0:2])
print(order_code[3:7])
print(order_code[8:])
PY
2026
0810

 

시작은 포함하고 끝은 포함하지 않는다

text[시작:끝]은 시작 인덱스의 글자부터 가져오되 끝 인덱스의 글자는 가져오지 않습니다. 그래서 order_code[0:2]는 인덱스 0과 1만 가져와 "PY"가 됩니다.

끝을 포함하지 않는 방식은 처음엔 야박해 보이지만 장점이 있습니다. 0:2로 잘라 낸 길이는 2 - 0, 3:7의 길이는 7 - 3처럼 바로 계산할 수 있습니다. 또 앞 조각을 0:2, 다음 조각을 2:5로 쓰면 경계가 겹치지도 비지도 않습니다.

시작을 생략한 text[:3]은 맨 앞부터 인덱스 3 직전까지, 끝을 생략한 text[8:]은 인덱스 8부터 마지막까지라는 뜻입니다.

 

없는 위치를 꺼내면 왜 IndexError가 날까

"파이썬라떼"의 길이는 5이고 사용할 수 있는 양수 인덱스는 0부터 4까지입니다. 그런데 6번 위치를 요청해 보겠습니다.

menu = "파이썬라떼"
print(menu[6])

Python 3.9.13에서 직접 실행하면 다음 오류가 발생했습니다.

Traceback (most recent call last):
  File "04_index_error.py", line 2, in <module>
    print(menu[6])
IndexError: string index out of range

이 오류는 “문자열 인덱스가 범위를 벗어났다”는 뜻입니다. Python이 글자를 찾지 못한 것이 아니라, 애초에 존재하지 않는 자리를 요청한 것입니다.

헷갈릴 때는 먼저 len(text)를 출력하고, 가능한 양수 인덱스가 0부터 len(text) - 1까지인지 확인해 보세요.

 

꺼낸 글자를 그 자리에서 바꿀 수 없는 이유

리스트에서는 특정 위치의 값을 바꿀 수 있지만 문자열은 한 번 만들어지면 내부 글자를 직접 교체할 수 없습니다. 다음 코드를 실행해 보겠습니다.

menu = "파이썬라떼"
menu[0] = "자"
Traceback (most recent call last):
  File "05_string_is_immutable.py", line 2, in <module>
    menu[0] = "자"
TypeError: 'str' object does not support item assignment

문자열은 불변(immutable) 자료형입니다. 대괄호로 글자를 읽을 수는 있지만 그 자리에 새 글자를 넣을 수는 없습니다.

바꾸고 싶다면 앞뒤 조각을 이용해 새로운 문자열을 만듭니다.

menu = "파이썬라떼"
new_menu = "자" + menu[1:]

print(menu)
print(new_menu)
파이썬라떼
자이썬라떼

원래 문자열은 그대로이고 new_menu라는 새 문자열이 만들어집니다. 변수에 값을 다시 연결하는 원리는 파이썬 변수 기초에서 이어서 확인할 수 있습니다.

 

주문표에서 필요한 글자만 꺼내기

이제 앞에서 배운 원리로 주문 번호와 메뉴명을 정리해 보겠습니다.

order_code = "PY-2026-0810"
drink = "파이썬라떼"

language = order_code[:2]
year = order_code[3:7]
day = order_code[8:]
short_name = drink[:3]

print("분류:", language)
print("연도:", year)
print("주문일:", day)
print("메뉴 표시:", short_name)
분류: PY
연도: 2026
주문일: 0810
메뉴 표시: 파이썬

코드가 길어 보여도 하는 일은 하나입니다. 순서가 있는 문자열에서 필요한 위치나 구간을 골라 새 문자열을 만드는 것입니다. 실제 주문 번호를 다룬다면 길이와 형식이 예상과 같은지 먼저 확인해야 없는 위치를 읽는 오류를 피할 수 있습니다.

 

문자열 코드를 읽는 네 단계

문자열의 대괄호가 보이면 아래 순서로 종이에 표시해 보세요.

  1. 따옴표 안의 글자를 한 칸씩 나눈다.
  2. 첫 칸부터 0, 1, 2로 번호를 붙인다.
  3. 숫자 하나면 한 글자, 콜론이 있으면 구간을 꺼낸다고 읽는다.
  4. 슬라이스의 끝 번호는 포함하지 않는다고 확인한다.

저도 다시 공부하면서 0부터 시작한다는 규칙만 외우기보다 글자 아래에 직접 번호를 써 보니 인덱스와 슬라이싱이 별개 문법이 아니라는 점이 보였습니다. 문자열이 순서 있는 글자 묶음이라는 원리를 잡으면 len(), 음수 인덱스, 구간 자르기가 자연스럽게 이어집니다.

다음 단계에서는 문자열 안에 원하는 글자가 있는지 확인하고, 필요 없는 공백을 정리하는 방법으로 이어갈 수 있습니다. 키보드로 문자열을 입력받는 과정은 Python input 사용법에서 연습할 수 있습니다.

 

참고

대표 이미지는 글의 주제를 나타내기 위해 이미지 생성 도구로 제작한 일러스트이며, 실제 Python 실행 화면은 아닙니다.

댓글

💲 추천 글