프로그래밍 개발 공부

[Python 학습] 2-7 파이썬 슬라이싱과 인덱싱 완벽 정리: 끝 번호가 왜 포함 안 될까? (문자열, 리스트)

wikys 2026. 7. 6. 11:07
코딩을 처음 배우면서 파이썬 문자열이나 리스트를 다룰 때, 가장 먼저 마주하는 벽이 있습니다. 바로 "어? 왜 첫 번째 글자를 가져오라는데 1이 아니라 0을 써야 하지?", "슬라이싱할 때 왜 내가 원하는 끝자리 하나 전까지만 잘리는 걸까?" 같은 의문이죠. 텍스트 데이터를 가공하거나 리스트에서 원하는 정보를 뽑아낼 때마다 헷갈려서 매번 구글링을 반복하고 계신다면, 이 글을 끝까지 읽어주세요. 단순한 문법 암기가 아니라, 파이썬이 데이터를 바라보는 '위치와 범위'의 진짜 원리를 실전 활용 팁 및 주의점과 함께 짚어드립니다.

--------------------------------------------------------------------------------

1. 인덱싱(Indexing)과 슬라이싱(Slicing), 도대체 뭐가 다를까?
입문자가 가장 흔하게 겪는 오해는 인덱싱과 슬라이싱을 '비슷한 문법'으로 뭉뚱그려 생각하는 것입니다. 하지만 두 가지는 성격이 완전히 다릅니다.
  • 인덱싱(Indexing) : '점(Point)'을 찍어 특정 위치의 요소 단 하나를 꺼내는 작업입니다. 책장에서 특정 책 딱 한 권을 지정해 꺼내는 것과 같습니다.
  • 슬라이싱(Slicing) : 시작과 끝을 정해 구간(Range)을 통째로 오려내는 작업입니다. 책장의 특정 칸에 있는 책 여러 권을 한 번에 가져오는 구역 지정이라고 볼 수 있습니다.
[선택 및 비교 기준] 이 차이는 결괏값의 형태에서 극명하게 나타납니다. 예를 들어, a은 하나의 요소(문자 1개 등)를 반환하지만, a[0:1]은 길이가 1인 범위 내의 조각(부분 집합)을 반환하므로 두 작업의 결과 성격 자체가 다릅니다.
 
--------------------------------------------------------------------------------
2. 파이썬 위치 번호는 왜 하필 0부터 시작할까?
우리는 일상에서 물건을 셀 때 "첫 번째, 두 번째"라고 숫자를 셉니다. 하지만 파이썬에서 인덱스 번호는 1이 아닌 0부터 시작합니다. 이 때문에 초보자들은 첫 번째 값을 찾으려고 무심코 a을 입력하는 실수를 자주 범하곤 합니다.
이 차이를 극복하려면 인덱스를 '순번'이 아닌 '위치 번호(거리)'로 생각해야 합니다. 즉, 0번 인덱스는 "시작점에서 0칸 떨어져 있는 위치", 즉 맨 처음 요소라는 뜻입니다. 1번 인덱스는 시작점에서 1칸 떨어진 두 번째 요소를 의미합니다. 컴퓨터의 메모리 주소 접근 방식에서 유래한 이 개념을 '거리'로 이해하면 더 이상 헷갈리지 않습니다.

--------------------------------------------------------------------------------

3. 슬라이싱, 왜 항상 끝 번호는 포함되지 않을까?
슬라이싱을 할 때 text[0:3]이라고 쓰면, 직관적으로 0, 1, 2, 3번 데이터를 모두 가져올 것 같지만 실제로는 0, 1, 2번까지만 선택됩니다. 도대체 왜 파이썬은 끝 번호를 포함하지 않는 걸까요?
가장 큰 이유는 바로 범위(길이)를 계산하기 쉽게 만들기 위해서입니다. 0:3처럼 작성하면 3 - 0 = 3, 즉 정확히 3개의 요소를 가져오게 됩니다. 시작점과 끝점의 차이가 곧 선택한 데이터의 길이가 되므로, 코드를 읽을 때 일관성이 생기고 에러를 줄일 수 있습니다.
[실전 팁] 슬라이싱 코드를 읽을 때는 "0번부터 3번까지"라고 사람식으로 읽기보다, "0에서 시작해서 3번 직전까지"라고 읽는 습관을 들이는 것이 좋습니다.

--------------------------------------------------------------------------------

4. 리스트와 문자열, 두 곳에 모두 적용되는 마법
파이썬 슬라이싱과 인덱싱은 문자열과 리스트에 모두 동일한 원리로 작용합니다. 두 자료형 모두 '순서가 있는(Sequence)' 구조이기 때문입니다.
예를 들어, text = "python"에서 text[1:4]를 하면 "yth"가 추출되고, nums =에서 nums[1:4]를 하면 이 추출됩니다. 안에 들어 있는 원소가 글자냐 숫자냐의 차이일 뿐, 처리하는 위치 감각은 100% 동일합니다.
[활용 방향] 이 기본기에 [start:end:step] 문법을 추가로 활용하면 데이터 가공이 훨씬 쉬워집니다. a[0:5:2]처럼 2칸씩 건너뛰며 데이터를 샘플링하거나, a[::-1]을 통해 데이터의 순서를 손쉽게 역순으로 뒤집을 수도 있습니다.

--------------------------------------------------------------------------------

5. 실무 적용 시 주의점 : 독자들이 자주 겪는 오류
마지막으로 실제 코드를 작성할 때 겪기 쉬운 주의점을 비교해 드립니다.
  • 범위 초과 (Out of Range) 시의 행동 차이 : 인덱싱에서 자료의 길이를 벗어난 번호를 호출(예: 길이가 5인 문자열에 a)하면 IndexError가 발생해 프로그램이 즉시 멈춥니다.
  • 반면, 슬라이싱은 인덱스를 벗어나도 오류를 뱉지 않고 유연하게 동작합니다. a[0:100]처럼 요청하더라도 파이썬이 알아서 문자열이나 리스트가 끝나는 시점까지만 데이터를 가져오고 에러 없이 넘깁니다. 이 차이를 활용하면, 입력되는 데이터의 길이가 불확실할 때 안전하게 앞부분만 잘라오는 방어적 코드를 짤 수 있습니다.

--------------------------------------------------------------------------------

마무리하며 오늘 정리한 인덱싱과 슬라이싱은 단순한 파이썬 기초 문법을 넘어, 앞으로 데이터 전처리나 반복문 작성 시 매일같이 사용하게 될 핵심 도구이자 기초 감각입니다.
이러한 데이터의 위치와 범위를 쪼개는 감각을 확실히 잡으셨다면, 다음 단계로는 이를 활용해 반복 처리를 획기적으로 줄여주는 '리스트 컴프리헨션(List Comprehension)'이나 파이썬 for문의 실전 활용법으로 넘어가 보시는 것을 추천해 드립니다. 파이썬 코딩, 이제는 감이 아니라 정확한 원리로 접근해 보세요!
 
반응형