본문 바로가기
Language/Python

[고등학생부터, 파이썬] 13. 자료구조 총정리

by kellis 2026. 8. 20.
반응형
고등학생부터, 파이썬 · 13화

자료구조 총정리 — 언제 무엇을 쓸까

리스트, 튜플, 세트, 딕셔너리 네 가지를 한자리에 놓고 비교합니다.

그리고 이 네 가지를 따로 쓰지 않고 조합해서 써 보는 예제도 다루어보아요.

이 시리즈를 시작하며

요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠. 

개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.

이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.

 

고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.

중간중간 빈칸 채우기학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

 

Chapter 29
자료구조 비교

우리는 총 4가지의 자료구조를 배웠습니다: 리스트(List), 튜플(Tuple), 세트(Set), 딕셔너리(Dictionary).

모두 여러 개의 데이터를 저장해 다루기 위해 사용하지만, 저마다 쓰이는 목적이 다릅니다.

학교에 비유하면

리스트 → 출석부 (순서대로 이름이 있고 수정 가능)

튜플 → 시험 시간표 (정해지면 바뀌지 않음)

세트 → 중복 없이 모은 학생 번호

딕셔너리 → 생활기록부 (이름, 반, 번호 등 정보 저장)

구분 리스트 튜플 세트 딕셔너리
기호 [] () {} {}
순서 O O X 입력 순서 유지*
중복 O O X Key X / Value O
인덱스 O O X X (Key 사용)
수정 O X O
추가 / 삭제 O X O O

* 파이썬 3.7 이상에서는 딕셔너리가 입력한 순서를 유지하지만, 값을 가져올 때는 인덱스가 아니라 Key를 사용합니다.

* 세트는 리스트처럼 특정 원소를 인덱스로 콕 집어서 수정하는 것은 불가능하지만, add() / remove() 로 원소를 넣고 빼는 건 가능하기 때문에 △ 로 표기했습니다. 

언제 무엇을 쓸까요

데이터를 계속 추가하고 삭제한다 → 리스트

절대 바뀌면 안 된다 → 튜플

같은 값이 있으면 안 된다 → 세트

이름과 값을 함께 저장한다 → 딕셔너리

가장 헷갈리는 것 · {}는 세트일까요, 딕셔너리일까요
python
numbers = {1, 2, 3}  # 세트
student = {"이름": "홍길동"}  # 딕셔너리

콜론(:)이 있으면 딕셔너리, 없으면 세트입니다. 그리고 numbers = {}는 빈 세트가 아니라 빈 딕셔너리라는 것, 10화에서 짚었던 내용 기억나시나요?

빈칸 채우기
  1. 중복을 허용하지 않는 자료구조는?
  2. Key와 Value를 한 쌍으로 사용하는 자료구조는?
  3. 값을 절대 수정할 수 없는 자료구조는?
정답
1. 세트(Set)
2. 딕셔너리(Dictionary)
3. 튜플(Tuple)
학교 시험 유형
  1. 다음 상황에 적합한 자료구조를 각각 고르시오: (1) 학생 이름 목록 (2) RGB 색상 (3) 중복 없는 학번 (4) 회원 정보
정답
(1) 리스트 (2) 튜플 (3) 세트 (4) 딕셔너리

 

Chapter 30
자료구조 함께 사용하기

지금까지는 각각의 자료구조를 따로따로 살펴보았습니다. 당연히 실제 프로그램에서는 여러 자료구조를 함께 사용하겠죠?

선생님 설명

학생이 100명 있다고 생각해 봅시다. 학생 한 명은 이름·나이·점수를 가지고 있으니 딕셔너리가 어울리고, 학생 100명 전체는 리스트가 어울립니다. 그래서 딕셔너리를 리스트에 넣어서 사용합니다.

예제 · 리스트 안에 딕셔너리
python
students = [
    {"이름": "김철수", "점수": 90},
    {"이름": "이영희", "점수": 80}
]

print(students[0]["이름"])
실행 결과
김철수

어떻게 읽을까요? students[0] → 첫 번째 학생(딕셔너리 하나) → ["이름"] → 그 학생의 이름. 바깥은 번호(리스트), 안쪽은 이름표(딕셔너리)로 두 번 찾아 들어가는 거예요.

예제 · 장바구니 총 금액 구하기
python
cart = [
    {"상품": "사과", "가격": 3000},
    {"상품": "우유", "가격": 2500}
]

total = 0
for item in cart:
    print(item["상품"])
    total += item["가격"]

print("총 금액 :", total)
실행 결과
사과
우유
총 금액 : 5500

8화에서 배운 "total = 0으로 초기화하고 반복하며 더하기" 패턴이 여기서도 그대로 쓰입니다. 다만 이번엔 숫자가 아니라 item["가격"]처럼 딕셔너리 안의 값을 꺼내서 더하는 것뿐이에요.

반대도 가능 · 딕셔너리 안에 리스트/세트/튜플
python
student = {
    "이름": "김철수",
    "점수": [90, 95, 100],
    "생일": (2008, 5, 12)
}

print(student["점수"])
print(student["점수"][0])
print(student["생일"])
실행 결과
[90, 95, 100]
90
(2008, 5, 12)

딕셔너리의 값(Value) 자리에는 숫자나 문자열뿐 아니라 리스트, 세트, 튜플, 심지어 또 다른 딕셔너리도 들어갈 수 있습니다. 여러 번의 시험 점수처럼 값 자체가 여러 개라면 리스트를, 생일처럼 절대 안 바뀌는 값이라면 튜플을 넣으면 됩니다.

실무에서는?

실무에서는 리스트 안에 딕셔너리 구조가 특히 자주 나옵니다. 웹사이트에서 데이터를 받아오면 대부분 이런 모양이에요.

python
users = [
    {"id": 1, "name": "홍길동", "age": 20},
    {"id": 2, "name": "김철수", "age": 22}
]
코드 읽기
  1. 다음 코드의 실행 결과를 작성하시오.
    python
    books = [
        {"제목": "파이썬", "가격": 15000},
        {"제목": "자바", "가격": 18000}
    ]
    print(books[1]["제목"])
정답
자바 — books[1]은 두 번째 딕셔너리이고, 그 안의 "제목" 값을 꺼냅니다.
학교 시험 유형
  1. 리스트 안에 딕셔너리를 사용하는 이유를 서술하시오.
정답
여러 개의 데이터(학생, 상품 등)를 관리해야 하는데, 각 데이터는 이름·가격처럼 여러 속성을 가지고 있기 때문입니다. 데이터가 여러 개라는 점은 리스트로, 하나하나가 여러 속성을 가진다는 점은 딕셔너리로 표현해서 두 자료구조를 함께 사용합니다.
종합 예제 · 성적 우수자 확인 프로그램
python
students = [
    {"이름": "김철수", "점수": 95},
    {"이름": "이영희", "점수": 80},
    {"이름": "박민수", "점수": 100}
]

for student in students:
    print(student["이름"], ":", student["점수"])
    if student["점수"] >= 90:
        print("우수 학생")
    print()
실행 결과
김철수 : 95 우수 학생 이영희 : 80 박민수 : 100 우수 학생

리스트로 여러 학생을 순회하고, 딕셔너리로 각 학생의 정보를 꺼내고, if로 조건을 검사하고 — 지금까지 배운 것들이 전부 한 프로그램 안에 모였습니다.

다음 화 예고 — 14화에서는 반복되는 코드 덩어리를 이름 붙여서 재사용하는 함수(Function)를 배웁니다. 매개변수와 반환값(return)이 무엇인지부터 차근차근 정리해볼게요.
반응형

댓글