바이브코더를 위한 파이썬 기초

바이브코더를 위한 파이썬 기초 5편: 리스트와 0부터 세는 인덱스

파이썬 리스트를 만들고 꺼내고 추가하고 훑는 법. 인덱스가 0부터인 이유, -1로 마지막 항목 꺼내기, IndexError가 나는 경우와 바이브코딩에서 주의할 점을 정리했다.

바이브코더를 위한 파이썬 기초 5편: 리스트와 0부터 세는 인덱스

AI에게 "엑셀 파일에서 이름만 뽑아 줘"라고 하면 결과를 리스트로 받는 경우가 많다. 리스트는 여러 값을 순서대로 담는 묶음이고, 파이썬에서 가장 많이 쓰는 자료형 중 하나다. 이 글은 '바이브코더를 위한 파이썬 기초' 10편 중 5편으로, 리스트를 만들고 꺼내고 추가하고 반복문으로 훑는 법, 그리고 IndexError가 나는 이유를 다룬다. 예제는 Python 3.15 기준으로 설명하며 Python 3.14.2에서 실행해 결과를 확인했다.

어두운 배경 위 한 줄로 늘어선 칸 중 첫 칸은 파랑, 마지막 칸은 주황으로 빛나고 주황 상자가 끝 칸으로 들어오는 일러스트

핵심 요약

  • 리스트는 대괄호 [] 안에 값을 쉼표로 나열한 순서 있는 묶음이다.
  • 인덱스(자리 번호)는 0부터 시작한다. -1은 마지막 항목이다.
  • 항목이 3개면 쓸 수 있는 인덱스는 0, 1, 2뿐이다. [3]은 IndexError가 난다.
  • append로 끝에 추가하고, len으로 개수를 세고, for로 하나씩 꺼낸다.

리스트는 번호 붙은 사물함 줄이다

장바구니 목록을 생각해 보자. 위에서부터 순서가 있고, 물건을 추가하거나 뺄 수 있다. 리스트도 같다.

번호가 붙은 사물함이 한 줄로 늘어선 모습으로 떠올리면 편하다. 다만 한 가지가 다르다. 첫 사물함 번호가 1이 아니라 0이다. 이 한 가지 때문에 생기는 리스트 실수가 많다.

만들기, 꺼내기, 추가하기, 훑기

fruits = ["사과", "배", "포도"]
print(fruits[0], fruits[-1])
fruits.append("귤")
print(len(fruits))
for f in fruits:
    print(f)
print(fruits[1:3])
사과 포도
4
사과
배
포도
귤
['배', '포도']
코드뜻
fruits[0]첫 번째 항목
fruits[-1]마지막 항목(뒤에서 첫 번째)
fruits.append("귤")맨 끝에 항목 추가
len(fruits)항목 개수
for f in fruits:항목을 하나씩 f에 붙여 반복(4편)
fruits[1:3]1번 자리부터 3번 자리 앞까지 잘라 내기

fruits[1:3]이 ['배', '포도']인 이유는 4편의 range와 같다. 끝 번호는 포함하지 않는다. 파이썬은 "시작은 포함, 끝은 제외" 규칙을 여러 곳에서 똑같이 쓴다.

흔한 함정: 마지막 항목은 fruits[len(fruits)]일까

항목이 3개니 fruits[3]이 마지막일 것 같지만 아니다.

fruits = ["사과", "배", "포도"]
try:
    print(fruits[3])
except IndexError as e:
    print(e)
list index out of range

(try / except는 오류를 잡아 메시지만 보여 주는 문법으로, 8편에서 자세히 다룬다.)

항목이 3개면 인덱스는 0, 1, 2뿐이다. list index out of range는 "그 번호의 사물함은 없다"는 뜻이다. 마지막 항목은 fruits[-1] 또는 fruits[len(fruits) - 1]로 꺼낸다.

바이브코딩에서 리스트를 만나는 곳

  • 파일 목록, 엑셀의 한 열, 웹에서 가져온 검색 결과는 리스트로 다루는 경우가 많다.
  • 화면에는 "1번, 2번…"으로 보여 주면서 코드 안에서는 0부터 센다. 사람용 번호와 리스트 인덱스가 1만큼 차이 나는 곳에서 버그가 잘 생긴다. 10편의 할 일 목록에서 이 차이를 직접 다룬다.
  • 목록이 비어 있을 때 [0]이나 [-1]을 쓰면 IndexError가 난다. 검색 결과가 0건일 수 있는 코드라면 AI에게 "결과가 비어 있으면 어떻게 되는지 처리해 줘"라고 요청한다.

IndexError가 나면 오류가 난 줄에서 리스트의 길이(len)와 쓰려던 인덱스를 함께 출력해 보자. 원인이 바로 보인다.

스스로 확인하기

  1. nums = [10, 20, 30]에서 nums[-1]은? → 30. 음수 인덱스는 뒤에서부터 센다.
  2. len(nums)가 3일 때 nums[3]은? → IndexError. 인덱스 3은 네 번째 항목인데, 없다.

직접 해 보기

좋아하는 영화 5개로 리스트를 만들고, 하나를 추가한 뒤 모두 출력해 보자. 6개가 출력되면 성공이다. 막히면 append의 괄호와 따옴표를 확인한다.

movies = ["기생충", "올드보이", "인터스텔라", "토이 스토리", "인사이드 아웃"]
movies.append("라라랜드")
print(len(movies))
for m in movies:
    print(m)
6
기생충
올드보이
인터스텔라
토이 스토리
인사이드 아웃
라라랜드

이전 편과 다음 편

시리즈 전체 목록은 10편 끝에 모아 두었다.

목록으로