파이썬 리스트의 n번째 값의 인덱스 번호는?
파이썬 리스트 인덱스: n번째 값을 가져올 때 왜 n-1을 쓸까?
파이썬에서 리스트의 n번째 값을 가져오려면 리스트[n-1]과 같이 n-1을 사용해야 합니다. 프로그래밍에 처음 입문한 분들은 "왜 첫 번째 요소가 1이 아니라 0번 인덱스일까?"에서 자주 혼란을 겪습니다. 이 글에서는 그 이유와 동작 원리를 그림 대신 코드로 직접 확인하며 설명합니다.
이 글을 읽기 전에 파이썬의 리스트(배열) 기본 개념만 알고 있다면 충분합니다. 실습 예제를 따라하며 원리를 익혀보세요.
0부터 시작하는 인덱스의 원리와 최소 예제
파이썬에서 리스트의 인덱스는 0부터 시작합니다. 즉, 첫 번째 값이 my_list[0]이고, 두 번째 값이 my_list[1]입니다. 이 규칙은 C, 자바, 자바스크립트 등 다른 많은 언어에서도 마찬가지입니다. 왜 그럴까요?
가장 기본적인 예제로 확인해봅시다.
numbers = [10, 20, 30, 40, 50]
print(numbers[0]) # 첫 번째 값
print(numbers[1]) # 두 번째 값
print(numbers[2]) # 세 번째 값실행 결과
10
20
30
위 코드를 실행하면 numbers[0]이 10, numbers[1]이 20, numbers[2]이 30입니다. 즉, n번째 값을 가져오려면 numbers[n-1]을 사용해야 합니다.
이렇게 0부터 시작하는 이유는 컴퓨터가 메모리에서 값을 순서대로 저장할 때, 첫 번째 위치를 '0번째'로 간주하기 때문입니다. 그래서 5개의 값이 있으면 인덱스는 0~4까지입니다.
실제 사용 예제: n번째 값 구하기
사용자가 입력한 n번째 값을 가져오고 싶을 때, 파이썬에서는 이렇게 작성합니다.
fruits = ['사과', '바나나', '포도', '딸기', '복숭아']
n = 3 # 3번째 과일을 가져오고 싶을 때
print(fruits[n-1])실행 결과
포도
n번째 값을 가져오고 싶다면 인덱스에 n-1을 넣는다는 점을 기억하세요. 만약 fruits[3]를 쓴다면, 네 번째 과일 '딸기'가 출력됩니다. 이처럼 프로그래밍에서 '번째'와 '인덱스'는 1 차이가 있습니다.
반대로, 리스트에서 특정 인덱스의 값을 사람에게 설명할 때는 1을 더해서 "몇 번째 값"이라고 말해야 혼동이 없습니다.
초보자가 자주 하는 실수: off-by-one 오류와 인덱스 범위
가장 흔한 실수는 n번째 값을 가져올 때 n을 그대로 인덱스로 쓰는 것입니다. 예를 들어, 아래처럼 코드를 작성하면 어떻게 될까요?
잘못된 예
my_list = [1, 2, 3, 4]
n = 3
print(my_list[n]) # 3번째 값을 가져오려고 함
위 코드는 오류를 발생시킵니다. 인덱스 n은 3이고, my_list[3]은 네 번째 값이기 때문입니다. 3번째 값은 my_list[2]입니다.
수정된 올바른 코드:
my_list = [1, 2, 3, 4]
n = 3
print(my_list[n-1]) # 3번째 값은 인덱스 2실행 결과
3
또 다른 실수는 인덱스가 리스트 범위를 벗어날 때입니다. 예를 들어, 리스트에 5개의 값이 있다고 해서 my_list[5]를 쓰면 오류가 납니다. 인덱스는 0~4까지니까요.
잘못된 예
my_list = [10, 20, 30]
print(my_list[3]) # 네 번째 값을 가져오려고 함
위 코드는 IndexError: list index out of range와 같은 오류를 발생시킵니다. 항상 인덱스가 0 ~ (길이-1) 범위에 있어야 합니다.
더 안전하게 사용하는 습관과 실제 활용 예시
실제 프로그램에서는 어떤 n번째 값이 있는지 미리 확인하는 것이 중요합니다. 예를 들어, 사용자가 1~리스트 길이 범위 밖의 값을 입력하면 오류가 나기 때문입니다. 아래는 입력값을 점검하는 예제입니다.
items = ['가', '나', '다']
n = 4 # 잘못된 n값 (리스트 길이보다 큼)
if 1 <= n <= len(items):
print(items[n-1])
else:
print("잘못된 번호입니다.")실행 결과
잘못된 번호입니다.
이렇게 하면 잘못된 n값을 사전에 걸러 오류를 방지할 수 있습니다.
실전에서는 for문과 함께 인덱스와 값을 동시에 다루는 경우도 많습니다. 아래처럼 enumerate()를 활용하면 몇 번째 값과 실제 인덱스를 혼동하지 않고 처리할 수 있습니다.
names = ['홍길동', '심청이', '이몽룡']
for idx, name in enumerate(names):
print(f"{idx+1}번째: {name}")실행 결과
1번째: 홍길동
2번째: 심청이
3번째: 이몽룡
이렇게 하면 사용자는 1번째, 2번째, 3번째라고 읽을 수 있고, 실제 인덱스는 0, 1, 2로 관리합니다.
핵심 정리와 연습 문제
- 파이썬 리스트의 인덱스는 0부터 시작하며, n번째 값을 가져올 때는
[n-1]을 사용해야 합니다. - 인덱스 범위를 벗어나면 오류가 발생하므로, 항상 0 ≤ 인덱스 < 리스트 길이를 지켜야 합니다.
- 실제 값을 사람에게 설명할 때는 인덱스에 1을 더해 "몇 번째"로 표현하면 혼동을 줄일 수 있습니다.
연습 문제
- 다음 리스트에서 4번째 값을 출력하는 코드를 작성하세요.
numbers = [5, 10, 15, 20, 25] - 리스트의 길이보다 큰 n값을 입력할 때 오류를 방지하는 코드를 작성해보세요.
(힌트: if문과len()을 사용하세요) - 이름 리스트에서 1번째부터 n번째까지 순서대로 "몇 번째: 이름" 형태로 출력해보세요.
names = ['철수', '영희', '민수', '수지']
각 문제를 직접 풀어서 실행 값을 확인해보면 인덱스 개념이 더욱 확실해집니다.