파이썬 리스트와 튜플은 여러 값을 하나로 묶어서 다룰 때 사용하는 자료형입니다. 둘 다 순서가 있지만, 값을 바꿀 수 있는지에 따라 쓰임이 달라집니다.
변수는 값 하나를 저장할 때 많이 사용합니다.
name = "철수"
age = 20
그런데 이름 5개를 저장해야 한다면 어떻게 해야 할까요?
name1 = "철수"
name2 = "영희"
name3 = "민수"
name4 = "지연"
name5 = "수진"
이렇게 변수 이름을 계속 늘리는 방식은 관리하기 어렵습니다.
이럴 때 사용하는 것이 리스트(list) 입니다.
names = ["철수", "영희", "민수", "지연", "수진"]
리스트를 사용하면 여러 값을 하나의 변수에 담아 관리할 수 있습니다.
리스트는 여러 값을 담는 자료형이다
리스트는 여러 값을 순서대로 저장하는 자료형입니다.
fruits = ["사과", "바나나", "딸기"]
위 코드에서 fruits라는 변수 안에는 세 개의 문자열이 들어 있습니다.
리스트 안에는 문자열뿐 아니라 숫자도 넣을 수 있습니다.
numbers = [10, 20, 30, 40]
서로 다른 자료형을 함께 넣는 것도 가능합니다.
user = ["철수", 20, True]
다만 초보 단계에서는 한 리스트 안에 같은 성격의 값을 넣는 방식이 이해하기 쉽습니다.
scores = [80, 90, 75]
names = ["철수", "영희", "민수"]
파이썬 리스트 만들기
리스트는 대괄호 []를 사용해서 만듭니다.
리스트이름 = [값1, 값2, 값3]
예시는 다음과 같습니다.
colors = ["red", "green", "blue"]
빈 리스트도 만들 수 있습니다.
items = []
빈 리스트는 나중에 값을 추가할 때 자주 사용합니다.
items = []
items.append("노트북")
items.append("마우스")
print(items)
실행 결과는 다음과 같습니다.
["노트북", "마우스"]
리스트에서 값 꺼내기: 인덱싱
리스트 안의 값은 순서가 있습니다.
fruits = ["사과", "바나나", "딸기"]
여기서 각각의 위치는 다음과 같습니다.
| 값 | 위치 |
|---|---|
| 사과 | 0 |
| 바나나 | 1 |
| 딸기 | 2 |
파이썬은 순서를 셀 때 0부터 시작합니다.
fruits = ["사과", "바나나", "딸기"]
print(fruits[0])
print(fruits[1])
print(fruits[2])
실행 결과는 다음과 같습니다.
사과
바나나
딸기
이처럼 리스트에서 특정 위치의 값을 가져오는 것을 인덱싱(indexing) 이라고 합니다.
음수 인덱스 사용하기
파이썬 리스트는 음수 인덱스도 사용할 수 있습니다.
fruits = ["사과", "바나나", "딸기"]
print(fruits[-1])
print(fruits[-2])
실행 결과는 다음과 같습니다.
딸기
바나나
-1은 마지막 값을 의미합니다.-2는 뒤에서 두 번째 값을 의미합니다.
마지막 값을 가져올 때는 fruits[-1]처럼 쓰는 경우가 많습니다.
리스트 일부만 가져오기: 슬라이싱
리스트에서 일부 값만 잘라서 가져올 수도 있습니다.
이것을 슬라이싱(slicing) 이라고 합니다.
numbers = [10, 20, 30, 40, 50]
print(numbers[1:4])
실행 결과는 다음과 같습니다.
[20, 30, 40]
numbers[1:4]는 인덱스 1부터 인덱스 4 전까지 가져오라는 뜻입니다.
주의할 점은 끝 위치의 값은 포함되지 않는다는 것입니다.
numbers = [10, 20, 30, 40, 50]
# 인덱스: 0 1 2 3 4
print(numbers[1:4])
결과는 인덱스 1, 2, 3에 해당하는 값입니다.
[20, 30, 40]
처음부터 가져오고 싶다면 시작 위치를 생략할 수 있습니다.
numbers = [10, 20, 30, 40, 50]
print(numbers[:3])
실행 결과는 다음과 같습니다.
[10, 20, 30]
특정 위치부터 끝까지 가져오고 싶다면 끝 위치를 생략할 수 있습니다.
numbers = [10, 20, 30, 40, 50]
print(numbers[2:])
실행 결과는 다음과 같습니다.
[30, 40, 50]
리스트에 값 추가하기
리스트에 값을 추가할 때는 append()를 많이 사용합니다.
fruits = ["사과", "바나나"]
fruits.append("딸기")
print(fruits)
실행 결과는 다음과 같습니다.
["사과", "바나나", "딸기"]
append()는 리스트의 맨 뒤에 값을 추가합니다.
원하는 위치에 값을 넣고 싶다면 insert()를 사용할 수 있습니다.
fruits = ["사과", "딸기"]
fruits.insert(1, "바나나")
print(fruits)
실행 결과는 다음과 같습니다.
["사과", "바나나", "딸기"]
insert(1, "바나나")는 인덱스 1 위치에 "바나나"를 넣으라는 뜻입니다.
리스트 값 수정하기
리스트의 값은 나중에 바꿀 수 있습니다.
fruits = ["사과", "바나나", "딸기"]
fruits[1] = "포도"
print(fruits)
실행 결과는 다음과 같습니다.
["사과", "포도", "딸기"]
기존에 인덱스 1 위치에 있던 "바나나"가 "포도"로 바뀌었습니다.
이처럼 리스트는 변경 가능한 자료형입니다.
리스트 값 삭제하기
리스트에서 값을 삭제하는 방법은 여러 가지가 있습니다.
가장 직관적인 방법은 remove()입니다.
fruits = ["사과", "바나나", "딸기"]
fruits.remove("바나나")
print(fruits)
실행 결과는 다음과 같습니다.
["사과", "딸기"]
remove()는 리스트에서 해당 값을 찾아 삭제합니다.
인덱스를 기준으로 삭제하고 싶다면 pop()을 사용할 수 있습니다.
fruits = ["사과", "바나나", "딸기"]
fruits.pop(1)
print(fruits)
실행 결과는 다음과 같습니다.
["사과", "딸기"]
pop(1)은 인덱스 1에 있는 값을 삭제합니다.
pop()에 아무 값도 넣지 않으면 마지막 값을 삭제합니다.
fruits = ["사과", "바나나", "딸기"]
fruits.pop()
print(fruits)
실행 결과는 다음과 같습니다.
["사과", "바나나"]
리스트 길이 확인하기
리스트에 값이 몇 개 들어 있는지 확인할 때는 len()을 사용합니다.
fruits = ["사과", "바나나", "딸기"]
print(len(fruits))
실행 결과는 다음과 같습니다.
3
len()은 리스트뿐 아니라 문자열, 튜플 등 여러 자료형에서도 사용됩니다.
text = "Python"
print(len(text))
실행 결과는 다음과 같습니다.
6
리스트 안에 값이 있는지 확인하기
리스트 안에 특정 값이 있는지 확인할 때는 in을 사용합니다.
fruits = ["사과", "바나나", "딸기"]
print("사과" in fruits)
print("포도" in fruits)
실행 결과는 다음과 같습니다.
True
False
in은 조건문과 함께 자주 사용됩니다.
fruits = ["사과", "바나나", "딸기"]
if "사과" in fruits:
print("사과가 있습니다.")
조건문은 이후 글에서 자세히 다루겠습니다.
지금은 in을 사용하면 리스트 안에 값이 있는지 확인할 수 있다는 정도만 이해하면 됩니다.
튜플은 무엇인가?
튜플(tuple)은 리스트처럼 여러 값을 순서대로 담는 자료형입니다.
다만 튜플은 소괄호 ()를 사용합니다.
point = (10, 20)
튜플도 인덱싱이 가능합니다.
point = (10, 20)
print(point[0])
print(point[1])
실행 결과는 다음과 같습니다.
10
20
튜플도 슬라이싱할 수 있습니다.
numbers = (10, 20, 30, 40, 50)
print(numbers[1:4])
실행 결과는 다음과 같습니다.
(20, 30, 40)
여기까지 보면 리스트와 거의 비슷해 보입니다.
차이는 값을 바꿀 수 있는지에서 나옵니다.
튜플은 값을 바꿀 수 없다
리스트는 값을 수정할 수 있습니다.
fruits = ["사과", "바나나", "딸기"]
fruits[0] = "포도"
print(fruits)
실행 결과는 다음과 같습니다.
["포도", "바나나", "딸기"]
하지만 튜플은 한 번 만들면 내부 값을 바꿀 수 없습니다.
fruits = ("사과", "바나나", "딸기")
fruits[0] = "포도"
이 코드는 오류가 발생합니다.
TypeError: 'tuple' object does not support item assignment
튜플은 수정하기 어려운 리스트가 아니라, 변경할 수 없는 순서형 자료형입니다.
이 차이를 정확히 이해하는 것이 중요합니다.
리스트와 튜플의 차이
리스트와 튜플의 핵심 차이는 다음과 같습니다.
| 구분 | 리스트 | 튜플 |
|---|---|---|
| 기호 | [] |
() |
| 값 변경 | 가능 | 불가능 |
| 값 추가 | 가능 | 불가능 |
| 값 삭제 | 가능 | 불가능 |
| 순서 | 있음 | 있음 |
| 인덱싱 | 가능 | 가능 |
| 슬라이싱 | 가능 | 가능 |
리스트는 값을 추가, 수정, 삭제할 수 있습니다.
numbers = [1, 2, 3]
numbers.append(4)
numbers[0] = 10
print(numbers)
실행 결과는 다음과 같습니다.
[10, 2, 3, 4]
튜플은 값을 바꿀 수 없습니다.
numbers = (1, 2, 3)
이 상태에서 numbers[0] = 10처럼 수정하려고 하면 오류가 발생합니다.
리스트를 써야 하는 경우
리스트는 값이 나중에 바뀔 가능성이 있을 때 사용합니다.
예를 들어 장바구니를 생각해볼 수 있습니다.
cart = []
cart.append("노트북")
cart.append("마우스")
cart.append("키보드")
print(cart)
실행 결과는 다음과 같습니다.
["노트북", "마우스", "키보드"]
장바구니는 상품을 추가할 수도 있고, 삭제할 수도 있습니다.
이런 데이터는 리스트가 적합합니다.
학생 점수 목록도 리스트로 다루기 좋습니다.
scores = [80, 90, 75]
scores.append(100)
print(scores)
실행 결과는 다음과 같습니다.
[80, 90, 75, 100]
값이 계속 변할 수 있다면 리스트를 사용하면 됩니다.
튜플을 써야 하는 경우
튜플은 한 번 정한 값을 바꾸지 않을 때 사용합니다.
예를 들어 좌표를 생각해볼 수 있습니다.
point = (10, 20)
요일처럼 고정된 값에도 사용할 수 있습니다.
weekdays = ("월", "화", "수", "목", "금", "토", "일")
설정값처럼 바뀌면 안 되는 데이터에도 튜플을 사용할 수 있습니다.
rgb = (255, 255, 255)
튜플을 사용하면 이 데이터는 쉽게 수정되지 않는 값이라는 의도를 코드에서 드러낼 수 있습니다.
초보 단계에서는 이렇게 판단하면 됩니다.
- 나중에 값을 바꿀 수 있어야 한다면 리스트
- 한 번 정한 값을 유지하고 싶다면 튜플
값 하나짜리 튜플을 만들 때 주의할 점
튜플에서 헷갈리기 쉬운 부분이 하나 있습니다.
값이 하나만 있는 튜플을 만들 때는 쉼표가 필요합니다.
a = ("사과")
b = ("사과",)
print(type(a))
print(type(b))
실행 결과는 다음과 같습니다.
<class 'str'>
<class 'tuple'>
("사과")는 튜플이 아니라 문자열입니다.
값 하나짜리 튜플은 ("사과",)처럼 쉼표를 붙여야 합니다.
숫자도 마찬가지입니다.
a = (10)
b = (10,)
print(type(a))
print(type(b))
실행 결과는 다음과 같습니다.
<class 'int'>
<class 'tuple'>
초보자에게는 자주 필요한 문법은 아니지만, 튜플을 공부할 때 한 번은 알아두는 것이 좋습니다.
리스트와 문자열은 닮은 점이 있다
이전 글에서 문자열을 다뤘다면 리스트가 조금 더 쉽게 느껴질 수 있습니다.
문자열도 인덱싱할 수 있습니다.
text = "Python"
print(text[0])
print(text[1])
실행 결과는 다음과 같습니다.
P
y
문자열도 슬라이싱할 수 있습니다.
text = "Python"
print(text[0:3])
실행 결과는 다음과 같습니다.
Pyt
리스트도 마찬가지입니다.
items = ["P", "y", "t", "h", "o", "n"]
print(items[0])
print(items[0:3])
실행 결과는 다음과 같습니다.
P
['P', 'y', 't']
문자열과 리스트는 둘 다 순서가 있는 자료형입니다.
그래서 인덱싱과 슬라이싱 방식이 비슷합니다.
다만 문자열은 문자들이 이어진 자료형이고, 리스트는 여러 값을 담을 수 있는 자료형입니다.
자주 발생하는 오류
인덱스 범위를 벗어나는 경우
리스트에 없는 위치를 가져오려고 하면 오류가 발생합니다.
fruits = ["사과", "바나나", "딸기"]
print(fruits[3])
이 코드는 오류가 발생합니다.
IndexError: list index out of range
리스트의 마지막 인덱스는 값의 개수보다 1 작습니다.
fruits = ["사과", "바나나", "딸기"]
위 리스트에는 값이 3개 있습니다.
하지만 인덱스는 다음과 같습니다.
0, 1, 2
따라서 fruits[3]은 존재하지 않습니다.
remove()로 없는 값을 삭제하려는 경우
remove()는 리스트 안에 있는 값을 삭제합니다.
그런데 없는 값을 삭제하려고 하면 오류가 발생합니다.
fruits = ["사과", "바나나", "딸기"]
fruits.remove("포도")
오류는 다음과 같습니다.
ValueError: list.remove(x): x not in list
삭제하기 전에 값이 있는지 확인하면 오류를 줄일 수 있습니다.
fruits = ["사과", "바나나", "딸기"]
if "포도" in fruits:
fruits.remove("포도")
아직 조건문을 자세히 배우지 않았다면 이런 방식이 있다는 정도만 봐도 충분합니다.
리스트와 튜플 예제 정리
간단한 예제로 다시 정리해보겠습니다.
fruits = ["사과", "바나나", "딸기"]
fruits.append("포도")
fruits[1] = "수박"
fruits.remove("딸기")
print(fruits)
실행 결과는 다음과 같습니다.
["사과", "수박", "포도"]
리스트는 값을 추가하고, 수정하고, 삭제할 수 있습니다.
이번에는 튜플입니다.
colors = ("red", "green", "blue")
print(colors[0])
print(colors[1:3])
실행 결과는 다음과 같습니다.
red
('green', 'blue')
튜플은 인덱싱과 슬라이싱은 가능하지만, 값을 직접 수정할 수는 없습니다.
정리
리스트와 튜플은 여러 값을 하나로 묶어서 다룰 때 사용하는 자료형입니다.
리스트는 대괄호 []를 사용합니다.
fruits = ["사과", "바나나", "딸기"]
튜플은 소괄호 ()를 사용합니다.
fruits = ("사과", "바나나", "딸기")
두 자료형 모두 순서가 있습니다.
그래서 인덱싱과 슬라이싱을 사용할 수 있습니다.
차이는 값을 바꿀 수 있는지입니다.
리스트는 값을 추가, 수정, 삭제할 수 있습니다.
튜플은 한 번 만들면 내부 값을 바꿀 수 없습니다.
초보 단계에서는 이렇게 기억하면 됩니다.
리스트: 나중에 바뀔 수 있는 값들의 묶음
튜플: 바뀌지 않아야 하는 값들의 묶음
다음 글에서는 이름과 값이 짝을 이루는 자료형인 딕셔너리(dictionary) 와, 중복을 제거할 때 자주 사용하는 집합(set) 을 알아보겠습니다.
'개발 > python' 카테고리의 다른 글
| 파이썬 조건문 if 사용법 쉽게 이해하기 (0) | 2026.05.21 |
|---|---|
| 파이썬 딕셔너리와 집합 set 쉽게 이해하기 (0) | 2026.05.21 |
| 파이썬 문자열 사용법: 초보자가 자주 헷갈리는 예제 중심 정리 (0) | 2026.05.21 |
| 파이썬 변수와 자료형 쉽게 이해하기: 초보자를 위한 Python 기초 (0) | 2026.05.20 |
| ChatGPT로 Python 공부하는 방법: 비전공자도 따라 하는 파이썬 입문 로드맵 (0) | 2026.05.20 |