[자료구조] 튜플(Tuple)

Jimin_Note·2025년 8월 26일
0
post-thumbnail

📌 튜플(Tuple)

  • 리스트와 비슷하지만 아이템을 변경, 추가, 삭제할 수 없음 ❌
  • 선언은 () 소괄호 사용하고, 요소는 ,로 구분
  • 다양한 데이터 타입 저장 가능 + 중첩 구조도 가능!
family = ('엄마', '아빠', '나', '동생')
schedule = ('수업', '공부', '헬스')

튜플 아이템 조회 (Indexing)

names = ('홍길동', '박찬호', '이용규')
print(names[0])  # 홍길동
print(names[2])  # 이용규

in과 not in 키워드

students = ('지민', '정국', '뷔')
print('정국' in students)     # True
print('RM' not in students)  # True

튜플 길이 확인 (len()) -> 튜플에 저장된 아이템 개수 확인

sports = ('축구', '야구', '농구')
print(len(sports))  # 3

튜플 결합 (+ 연산자)

  • 리스트의 extend()는 튜플에서는 사용할 수 없어!
a = ('Python', 'Java')
b = ('C++', 'Go')
c = a + b
print(c)  # ('Python', 'Java', 'C++', 'Go')

튜플 슬라이싱

  • 리스트와 동일하게 튜플 [start:end:step] 사용 가능
  • 단, 슬라이싱으로 값을 변경할 수 없음! (불변 자료형이라서)
data = ('a', 'b', 'c', 'd', 'e')
print(data[1:4])      # ('b', 'c', 'd')
print(data[::-1])     # ('e', 'd', 'c', 'b', 'a')

리스트 ↔ 튜플 변환

a = [1, 2, 3]
b = tuple(a)
print(b)  # (1, 2, 3)

c = list(b)
print(c)  # [1, 2, 3]

리스트 VS 튜플

항목리스트튜플
괄호[]() 또는 생략 가능
변경 가능 여부가능 ✅불가능 ❌
메서드append(), remove() 등 다양거의 없음
용도데이터 변경이 필요한 경우데이터 변경이 필요 없는 경우

튜플 아이템 정렬

  • 튜플은 불변(immutable) → 직접 정렬 불가능
  • 해결법:
    1. list()로 변환 → sort() 사용 후 다시 tuple() 변환
    2. sorted() 사용 → 결과는 리스트 반환
  • 오름차순 / 내림차순 정렬 모두 가능

👉 실습 : 점수표에서 최고/최저점 제거 후 총점과 평균 구하기

scores = (90, 75, 100, 85, 60, 95)

# 최고/최저 제거
score_list = list(scores)
score_list.remove(max(score_list))
score_list.remove(min(score_list))

total = sum(score_list)
avg = total / len(score_list)

print("총점:", total) # 총점: 345
print("평균:", avg) # 평균: 86.25

for문

  • for문으로 튜플 아이템 순회 가능
  • 중첩 튜플도 내부 아이템까지 접근 가능

👉 실습 : 학급별 학생 수 출력 + 전체 학생 수 + 평균 학생 수 구하기

classes = (("1반", 25), ("2반", 28), ("3반", 22))

total = 0
for class_name, students in classes:
    print(f"{class_name} 학생 수: {students}")
    total += students

print("전체 학생 수:", total)
print("평균 학생 수:", total / len(classes))

1반 학생 수: 25
2반 학생 수: 28
3반 학생 수: 22
전체 학생 수: 75
평균 학생 수: 25.0

for문 ➕ 조건문

  • for + if → 조건에 맞는 아이템만 출력 가능
  • continue로 특정 조건 건너뛰기

👉 실습 ① 국어/영어/수학/과학/국사 점수를 입력받아 과락 과목 출력

subjects = (("국어", 80), ("영어", 45), ("수학", 92), ("과학", 55), ("국사", 70))

for subject, score in subjects:
    if score < 60:
        print(f"{subject} 과락: {score}")

영어 과락: 45
과학 과락: 55
👉 실습 ① 학급 학생 수 중 최소/최대 학급 찾기

classes = (("1반", 25), ("2반", 28), ("3반", 22))

min_class = min(classes, key=lambda x: x[1])
max_class = max(classes, key=lambda x: x[1])

print("학생 수 가장 적은 학급:", min_class)
print("학생 수 가장 많은 학급:", max_class)

학생 수 가장 적은 학급: ('3반', 22)
학생 수 가장 많은 학급: ('2반', 28)


while문

  • while문으로도 튜플 아이템 순회 가능
  • 인덱스 활용 → 다양한 방식으로 접근
    👉 실습 : 학급별 학생 수 / 전체 / 평균 출력
students = (25, 28, 22)
i = 0
total = 0

while i < len(students):
    print(f"{i+1}반 학생 수: {students[i]}")
    total += students[i]
    i += 1

print("전체 학생 수:", total)
print("평균 학생 수:", total / len(students))

1반 학생 수: 25
2반 학생 수: 28
3반 학생 수: 22
전체 학생 수: 75
평균 학생 수: 25.0

while문 + 조건문

  • while + if → 조건 검사하며 순회 가능
    👉 실습 ① 점수 입력받아 과락 과목 출력
subjects = (("국어", 80), ("영어", 45), ("수학", 92), ("과학", 55), ("국사", 70))

i = 0
while i < len(subjects):
    subject, score = subjects[i]
    if score < 60:
        print(f"{subject} 과락: {score}")
    i += 1

영어 과락: 45
과학 과락: 55
👉 실습 ① 학급별 학생 수 중 최소/최대 찾기

classes = (("1반", 25), ("2반", 28), ("3반", 22))

i = 0
min_class = classes[0]
max_class = classes[0]

while i < len(classes):
    if classes[i][1] < min_class[1]:
        min_class = classes[i]
    if classes[i][1] > max_class[1]:
        max_class = classes[i]
    i += 1

print("학생 수 가장 적은 학급:", min_class)
print("학생 수 가장 많은 학급:", max_class)

학생 수 가장 적은 학급: ('3반', 22)
학생 수 가장 많은 학급: ('2반', 28)

profile
Hello. I'm jimin:)

0개의 댓글