파이썬의 자료구조: 리스트, 튜플, 딕셔너리
1. 리스트 (List)
개념
리스트는 여러 값을 순서대로 저장할 수 있는 자료형입니다.
대괄호 [ ] 를 사용하며, 수정·삭제가 가능합니다(mutable).
numbers = [10, 20, 30, 40, 50]
names = ["Hannah", "Minji", "Yumi"]
Python
복사
리스트 인덱싱(Indexing)과 슬라이싱(Slicing)
numbers = [10, 20, 30, 40, 50]
print(numbers[0]) # 첫 번째 요소
print(numbers[-1]) # 마지막 요소
print(numbers[1:4]) # 2~4번째 요소
Python
복사
출력:
10
50
[20, 30, 40]
Plain Text
복사
리스트 주요 메서드
메서드 | 설명 | 예시 | 결과 |
append(x) | 맨 뒤에 추가 | numbers.append(60) | [10, 20, 30, 40, 50, 60] |
insert(i, x) | 지정 위치에 추가 | numbers.insert(2, 99) | [10, 20, 99, 30, 40, 50] |
remove(x) | 해당 요소 삭제 | numbers.remove(30) | [10, 20, 40, 50] |
pop() | 마지막 요소 꺼내기 | numbers.pop() | 50 |
sort() | 오름차순 정렬 | numbers.sort() | [10, 20, 30, 40, 50] |
실습 2-1: 점수 리스트 다루기
scores = [90, 85, 77, 95, 88]
# 1) 전체 출력
print(scores)
# 2) 평균 점수 구하기
avg = sum(scores) / len(scores)
print(f"평균 점수: {avg:.2f}")
# 3) 최고/최저 점수 출력
print(f"최고 점수: {max(scores)}, 최저 점수: {min(scores)}")
Python
복사
출력:
평균 점수: 87.00
최고 점수: 95, 최저 점수: 77
Plain Text
복사
2. 튜플 (Tuple)
개념
튜플은 변경이 불가능한(immutable) 리스트입니다.
소괄호 ( )로 선언하며, 주로 데이터 보호 목적에 사용됩니다.
point = (10, 20)
print(point[0]) # 10
Python
복사
리스트 vs 튜플 비교
구분 | 리스트(List) | 튜플(Tuple) |
선언 | [1, 2, 3] | (1, 2, 3) |
수정 가능 여부 | 가능 | 불가능 |
속도 | 약간 느림 | 빠름 |
활용 예 | 학생 점수 목록 | 좌표, 고정 데이터 |
실습 2-2: 좌표 관리
coord = (37.5665, 126.9780) # 서울 좌표
print(f"위도: {coord[0]}, 경도: {coord[1]}")
Python
복사
3. 딕셔너리 (Dictionary)
개념
딕셔너리는 키(key) 와 값(value) 의 쌍으로 이루어진 자료형입니다.
중괄호 { }로 선언하며, 키로 접근합니다.
student = {
"name": "Hannah",
"age": 25,
"major": "Data Science"
}
Python
복사
딕셔너리 다루기
print(student["name"])
student["age"] = 26 # 값 수정
student["grade"] = "A+" # 새 키 추가
print(student)
Python
복사
출력:
Hannah
{'name': 'Hannah', 'age': 26, 'major': 'Data Science', 'grade': 'A+'}
Plain Text
복사
딕셔너리 주요 메서드
메서드 | 설명 | 예시 | 결과 |
.keys() | 모든 키 가져오기 | student.keys() | dict_keys(['name', 'age', 'major']) |
.values() | 모든 값 가져오기 | student.values() | dict_values(['Hannah', 25, 'Data Science']) |
.items() | 키와 값 모두 가져오기 | student.items() | dict_items([('name', 'Hannah'), ('age', 25), ('major', 'Data Science')]) |
.get(key) | 안전하게 값 가져오기 | student.get('age') | 25 |
.pop(key) | 특정 키 삭제 | student.pop('major') | ‘Data Science’ |
실습 2-3: 딕셔너리로 학생 관리
student = {"name": "Yumi", "age": 23, "major": "AI"}
print("학생 정보:")
for key, value in student.items():
print(f"{key} : {value}")
# 정보 추가
student["grade"] = "A"
print("\n추가 후:", student)
Python
복사
출력:
학생 정보:
name : Yumi
age : 23
major : AI
추가 후: {'name': 'Yumi', 'age': 23, 'major': 'AI', 'grade': 'A'}
Plain Text
복사
4. 리스트와 딕셔너리 응용
리스트 안에 딕셔너리 (복합 구조)
“리스트는 순서를, 딕셔너리는 의미를 담당합니다.”
students = [
{"name": "Hannah", "age": 25, "score": 90},
{"name": "Minji", "age": 21, "score": 85},
{"name": "Yumi", "age": 23, "score": 95}
]
for s in students:
print(f"{s['name']}의 점수는 {s['score']}점입니다.")
Python
복사
출력:
Hannah의 점수는 90점입니다.
Minji의 점수는 85점입니다.
Yumi의 점수는 95점입니다.
Plain Text
복사
미니 퀴즈
문제 | 보기 |
1 | 리스트 선언 방법으로 올바른 것은? ① {1, 2, 3} ② (1, 2, 3) ③ [1, 2, 3] ④ list: 1, 2, 3 |
2 | 튜플의 특징으로 옳지 않은 것은? ① 불변이다 ② 수정 가능하다 ③ 속도가 빠르다 ④ 괄호는 ()이다 |
3 | 딕셔너리에서 값을 가져오는 안전한 방법은? ① dict.get(key) ② dict.value(key) ③ dict.item() ④ dict.key() |
4 | students = [{"name": "Kim", "age": 20}] 일 때, students[0]["name"]의 결과는? |
미니 퀴즈 정답
라이브 코드
# day1: 변수, 데이터 타입, 간단한 함수, 문자열 다루기
# day2: 자료 구조(하나 이상의 데이터를 다루는 구조)
a = 10
b = "abc"
b[0]
c = 3.14
d = True
e = None
# 변수 사용 이유: 재사용, 필요할 때 쓰기
# 리스트
# []
l = [1, 2, 3, 4, 5]
ages = [10, 23, 60, 40, 32]
age1 = ages[0] # 인덱싱
age2 = ages[1] # 인덱싱
age4 = ages[-1] # 인덱싱
age1_age2 = ages[0:2] # 슬라이싱 시작숫자:끝숫자의 인덱스번호+1
# (0부터 n까지 가져오려면 -> [0:n+1])
# age1 = 10
# age2 = 23
# 리스트에서 자주 사용하는 함수들
# append: 마지막에 하나의 요소를 추가
ages.append(60)
# print(ages) # [10, 15, 23, 60, 40, 32, 60]
# insert: 특정 인덱스 위치에 하나의 요소를 추가
ages.insert(1, 15)
# print(ages)
# remove: 특정 값을 지우기 (값이 여러 개일 경우, 제일 처음 만나는 값을 지운다)
ages.remove(60)
# print(ages) # [10, 15, 23, 40, 32, 60]
# [10, 15, 23, 60, 40, 32, 60]
# [10, 15, 23, 40, 32, 60]
# pop: 마지막 요소 하나를 꺼내기
last_age = ages.pop()
# print(ages)
# print(last_age)
# 3명의 나이가 적힌 종이 [20, 10, 30]
# 나이가 많은 순서대로 10살씩 더해서 출력
# 순서 정렬 [10, 20, 30]
# pop 30 + 10, pop 20 + 10, pop 10 + 10
# sort: 오름차순 정렬(위치, 값을 넣어줄 필요가 없다)
ages.sort()
# print(ages)
# 문자열 리스트 -> 알파벳 순서
# 튜플
# () 순서가 있다, 값을 변경할 수 없다.
seoul = (1324.42, 9482.12)
# 딕셔너리 key(키) - value(값)
# {}
student = { "name": "Hannah", "age": 25, "major": "Data Science" }
b = student["name"]
# print(b)
# keys 키값을 다 가져오기
student.keys()
# valuse 값들을 다 가져오기
student.values()
# items 키, 값 모두 가져오기
student.items()
# cls = student["class"]
# print(cls) # 없는 키에 접근할 때, 오류 발생
'''
Traceback (most recent call last):
File "day2.py", line 73, in <module>
cls = student["class"]
KeyError: 'class'
'''
cls_get = student.get("class")
# print(cls_get) # None 없다, 없는 키 접근할 때 None
# pop(키)
# 특정 키에 대해서 값을 가져오기
# 리스트 안에 딕셔너리
# 리스트로 순서를 주고 딕셔너리로 정체를 알려준다.
students = [
{"name": "Hannah", "age": 25, "score": 90},
{"name": "Minji", "age": 21, "score": 85},
{"name": "Yumi", "age": 23, "score": 95}
]
# 리스트 활용
# 점수 평균 구하기
scores = [91, 85, 77, 95, 88]
# 평균
# 다 더한 값 / 갯수
sum_scores = scores[0] + scores[1] + scores[2] + scores[3] + scores[4]
length_scores = 5
m = sum_scores / length_scores
# 내장 함수 사용하기 함수(변수)
sum_scores2 = sum(scores)
length_scores2 = len(scores)
m2 = sum_scores2 / length_scores2
# max(), min()
max_socre = max(scores)
min_score = min(scores)
# 첫 번째 학생의 성적 점수
first_stu = scores[0]
# print(first_stu)
scores[0] = 91
# print(scores)
# 튜플 활용
coord = (37.5665, 126.9780)
coord_1 = coord[0]
coord_2 = coord[1]
# coord[0] = 37.5666 # 값 수정이 안 됨
# 딕셔너리 활용
# 키-값 -> 순서 중요 x
student = {
"name": "Hannah",
"age": 25,
"major": "Data Science"
}
student["name"] = "Yumi"
print(student["name"])
# 각 자료구조를 사용하는 이유
# 각 자료구조의 값들에 접근하는 방법
# 각 자료구조들의 차이
# 자주 사용되는 함수
# 재료 -> 흐름, 제어
Python
복사
Copyright ⓒ 2025 TeamSparta All rights reserved.


