파이썬 리스트 인덱스
파이썬 리스트 인덱스의 시작: 0부터 왜일까?
파이썬을 처음 배우는 많은 분들이 리스트에서 첫 번째 값을 numbers[0]처럼 0번 인덱스로 꺼내는 방식에 당황합니다. "왜 1부터가 아니라 0부터 시작할까?"라는 질문은 프로그래밍 입문자라면 한 번쯤 품게 되는 궁금증입니다. 이 글에서는 그 이유와 실제 코딩에서 실수하지 않는 방법을 구체적으로 다룹니다.
0부터 시작하는 인덱스의 역사적·기술적 배경
리스트, 배열 등 여러 값이 순서대로 저장된 자료형에서는 각 값에 번호(인덱스)를 붙여 접근합니다. 많은 프로그래밍 언어, 특히 파이썬·C·자바스크립트 등은 이 인덱스가 0부터 시작합니다. 그 이유는 컴퓨터가 메모리에서 값을 읽어올 때, 첫 번째 값의 위치(주소)에서 0만큼 떨어진 자리가 첫 번째 요소이기 때문입니다.
- 즉, 인덱스 0은 처음 위치, 인덱스 1은 처음에서 한 칸 떨어진 위치를 의미합니다.
- 이렇게 하면 컴퓨터가 시작 주소 + (인덱스 × 자료형 크기)로 바로 값을 찾을 수 있어 속도가 빨라집니다.
이 개념은 효율적 메모리 관리와 계산의 단순화라는 실용적 목적에서 출발했습니다. 1부터 시작하면 매번 인덱스에서 1을 빼는 등 추가 연산이 필요하게 됩니다.
기본 예제: 리스트 인덱스의 실제 동작
실제로 파이썬에서 리스트를 만들고 첫 번째 값을 출력해봅시다.
numbers = [10, 20, 30, 40]
print(numbers[0])
print(numbers[1])
실행 결과
10
20
여기서 numbers[0]이 10, numbers[1]이 20을 반환합니다. 즉, 리스트의 첫 요소는 0번입니다.
코드 실행 순서와 off-by-one 오류
파이썬에서는 인덱스가 0부터 시작하므로 마지막 요소의 인덱스는 len(리스트) - 1입니다. 이 점을 간과하면 흔히 아래와 같은 실수를 저지르게 됩니다.
잘못된 예
numbers = [5, 15, 25]
print(numbers[3])
위 코드는 오류가 발생합니다. 이유는 numbers의 마지막 인덱스가 2이기 때문입니다. 3은 없는 인덱스입니다.
수정한 코드
numbers = [5, 15, 25]
print(numbers[2])
실행 결과
25
이렇게 0, 1, 2의 범위로 인덱스를 사용해야 합니다.
실제 사용 예시: 반복문과 인덱스
리스트의 모든 값을 하나씩 출력하고 싶을 때 가장 많이 사용하는 방식은 for문입니다. 인덱스를 직접 사용하는 예제입니다.
names = ['철수', '영희', '민수']
for i in range(len(names)):
print(i, names[i])
실행 결과
0 철수
1 영희
2 민수
range(len(names))는 0부터 len(names)-1까지 반복합니다. 각 반복에서 names[i]가 올바르게 동작하는 이유도 인덱스가 0부터 시작하기 때문입니다.
슬라이스와 인덱스: 범위의 시작과 끝
파이썬 리스트의 슬라이스 역시 인덱스가 0부터 시작하는 원리로 동작합니다. 슬라이스에서는 시작 인덱스는 포함, 끝 인덱스는 미포함이라는 규칙이 있으니 주의해야 합니다.
numbers = [1, 2, 3, 4, 5]
print(numbers[1:4])
실행 결과
[2, 3, 4]
위 코드는 numbers의 1번(두 번째)부터 3번(네 번째)까지 값을 출력합니다. 즉, 결과는 [2, 3, 4]입니다. 4번 인덱스는 포함되지 않습니다.
초보자가 자주 하는 혼동과 수정법
인덱스가 1부터 시작한다고 착각하면, 아래처럼 하나씩 밀리는 오류를 겪게 됩니다.
잘못된 예
numbers = [3, 6, 9]
print(numbers[1])
위 코드에서 3을 출력하려 했지만 실제로는 6이 출력됩니다. 3은 numbers[0]이기 때문입니다.
numbers = [3, 6, 9]
print(numbers[0])
실행 결과
3
이처럼 0이 리스트의 첫 번째 값을 가리킨다는 점을 반드시 기억해야 합니다.
핵심 정리와 연습 문제
핵심 정리: 파이썬 리스트의 인덱스는 0부터 시작하며, 이는 메모리 위치 계산의 효율성과 프로그래밍 언어의 전통에서 비롯되었습니다. 첫 번째 값을 꺼낼 때는 항상 0번 인덱스를 사용해야 하며, 마지막 값은 len(리스트) - 1라는 점을 잊지 마세요. 슬라이스 등 다른 자료형의 인덱스 규칙도 동일하게 적용됩니다.
- 연습 문제 1:
아래 리스트에서 '영희'를 출력하는 코드를 작성해보세요.friends = ['철수', '영희', '민수']
힌트: 0부터 시작합니다. - 연습 문제 2:
리스트scores = [70, 80, 90, 100]에서 마지막 값을 출력하는 코드를 작성하세요. - 연습 문제 3:
아래 코드에서 오류가 나는 부분을 찾고, 올바르게 수정하세요.nums = [4, 8, 12] print(nums[3])
연습 문제를 직접 풀어보면서 인덱스의 개념을 체득해보세요!