파이썬 리스트의 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을 더해 "몇 번째"로 표현하면 혼동을 줄일 수 있습니다.

연습 문제

  1. 다음 리스트에서 4번째 값을 출력하는 코드를 작성하세요.
    numbers = [5, 10, 15, 20, 25]
  2. 리스트의 길이보다 큰 n값을 입력할 때 오류를 방지하는 코드를 작성해보세요.
    (힌트: if문과 len()을 사용하세요)
  3. 이름 리스트에서 1번째부터 n번째까지 순서대로 "몇 번째: 이름" 형태로 출력해보세요.
    names = ['철수', '영희', '민수', '수지']

각 문제를 직접 풀어서 실행 값을 확인해보면 인덱스 개념이 더욱 확실해집니다.