[Python] 집합(Set)과 자료형 변환
집합(Set)
fruits = {"사과", "바나나", "딸기"}
- 집합은 파이썬에서 중복을 허용하지 않고, 순서가 없는 자료형
- 데이터의 유일성을 보장하거나, 중복을 제거해야 할 때 유용하게 사용됨
집합의 특징
- 중복을 허용하지 않음
- 순서가 없음
- 따라서 인덱스로 특정 위치에 접근할 수 없음(에러 발생)
- 수정 가능
- 하지만 변경 불가능한 자료형만 허용됨
- 예를 들어 숫자, 문자열, 튜플은 집합에 저장할 수 있지만 리스트는 저장 불가
집합을 사용하는 이유
- 중복 제거가 쉬움
- 자동으로 중복 제거
# 수강신청한 학생 명단 정리하기 registration_list = ["민지", "현우", "민지", "서연", "민지", "현우"] actual_students = set(registration_list) print("실제 수강생:", actual_students) # [실행 결과] # 실제 수강생: {'현우', '서연', '민지'} - 수학적인 집합 연산이 가능
&: 두 집합의 공통된 부분을 찾는 교집합|: 두 집합을 하나로 합치는 합집합-: 한 집합에서 다른 집합을 빼는 차집합
- 데이터 찾기가 빠름
- 특정 데이터의 유무를 빠르게 확인 가능
in연산자 사용
# 출석부에서 학생 찾기 attendance = {"민지", "현우", "서연", "지훈", "수민"} print("민지 있나요?", "민지" in attendance) print("영희 있나요?", "영희" in attendance) # [실행 결과] # 민지 있나요? True # 영희 있나요? False
- 특정 데이터의 유무를 빠르게 확인 가능
집합 만들기
✍️ 중괄호로 직접 만들기
- 가장 기본적인 방법
- 중괄호{} 사용
- 콤마로 데이터 구분
# 좋아하는 과목 집합 만들기
subjects = {"수학", "과학", "영어"}
print("좋아하는 과목:", subjects)
# 숫자 집합 만들기
numbers = {1, 2, 3, 4, 5}
print("숫자 모음:", numbers)
🛠 set() 함수로 만들기
set()함수는 다른 자료형(리스트, 튜플 등)을 집합으로 변환할 때 주로 사용- 리스트의 중복을 제거할 때 자주 사용됨
# 리스트를 집합으로 변환하기
score_list = [85, 92, 85, 90, 88, 92]
score_set = set(score_list)
print("중복 제거된 점수:", score_set)
# 문자열을 집합으로 변환하기
text = "hello"
char_set = set(text)
print("중복 제거된 문자들:", char_set)
🔲 빈 집합 만들기
- 데이터 없이 비어있는 집합을 만들 땐 반드시
set()함수 사용 - 중괄호{} 사용 시 빈 딕셔너리가 생성되니 주의해야함
empty_set = set()
print("빈 집합:", empty_set)
# 나중에 데이터 추가하기
empty_set.add("첫번째")
empty_set.add("두번째")
print("데이터 추가 후:", empty_set)
❗ 참고 (변경 불가능한 자료형만 허용)
# 리스트같은 자료형은 집합에 저장 불가능 nvalid_set = {1, "hello", [1, 2]} # 오류! 리스트는 집합에 저장 불가오류가 나는 이유?
- 집합의 특성상 안정성 유지를 위함
집합 활용하기
- 집합은 언제든지 새로운 데이터를 추가하거나 삭제할 수 있는 유연한 자료형
집합에 요소 추가하기
➕ add() 메서드
- 집합에 요소를 추가
- 하나의 요소만 추가
- 집합에 해당 요소가 이미 존재한다면 자동으로 무시해 중복되는 요소가 생기지 않음
numbers = {1, 2, 3}
numbers.add(4)
print("4 추가 후:", numbers)
# 이미 있는 값을 추가하면?
numbers.add(3) # 이미 있는 값은 무시됨
print("3 추가 시도 후:", numbers)
📥 update() 메서드
- 한꺼번에 여러 요소를 추가할 때 주로 사용
- 필요에 따라 리스트, 튜플, 문자열 등 다양한 자료형을 전달할 수 있고, 전달된 요소들을 한 번에 집합에 추가
fruits = {"사과", "바나나"}
fruits.update(["딸기", "포도"])
print("여러 과일 추가 후:", fruits)
집합에서 요소 제거하기
➖ remove() 메서드
- 지정한 요소를 정확하게 찾아서 제거
- 집합 안에 제거하려는 요소가 없으면 오류 발생
- 실수로 잘못된 데이터를 제거하려는 시도 방지
numbers = {1, 2, 3, 4, 5}
print("처음 집합:", numbers)
# 있는 요소 제거하기
numbers.remove(3)
print("3 제거 후:", numbers)
# 없는 요소 제거 시도
numbers.remove(10) # 오류 발생!
🚮 discard() 메서드
remove()메서드와 비슷하게 동작하지만, 제거하려는 요소가 없을 때 에러가 발생하지 않음- 데이터의 존재 여부가 확실하지 않을 때 사용
numbers = {1, 2, 3, 4, 5}
print("처음 집합:", numbers)
# 있는 요소 제거
numbers.discard(3)
print("3 제거 후:", numbers)
# 없는 요소 제거 시도
numbers.discard(10) # 오류가 나지 않아요
print("10 제거 시도 후:", numbers)
🧹 claer() 메서드
- 집합 내 모든 요소를 한 번에 삭제
- 비어있는 집합이 됨
numbers = {1, 2, 3, 4, 5}
print("처음 집합:", numbers)
# 모든 요소 제거하기
numbers.clear()
print("clear() 후:", numbers)
print("집합이 비었나요?", len(numbers) == 0)
교집합, 합집합, 차집합 연산
🔗 교집합 (intersection)
- 두 집합에서 공통으로 가지고 있는 요소들만 모음
- 기호 :
& - 메서드 :
intersection() - 특징 : 양쪽 모두 있는 요소만 남음
# 두 학생의 좋아하는 과목
younghee_subjects = {"국어", "수학", "영어", "과학"}
cheolsoo_subjects = {"수학", "영어", "체육", "미술"}
# & 기호로 교집합 구하기
common_subjects = younghee_subjects & cheolsoo_subjects
print("& 기호로 구한 공통 과목:", common_subjects)
# intersection() 메서드로 교집합 구하기
common_subjects2 = younghee_subjects.intersection(cheolsoo_subjects)
print("intersection()으로 구한 공통 과목:", common_subjects2)
🌍 합집합 (union)
- 두 집합의 모든 요소를 합친 것
- 중복되는 요소는 자동으로 하나만 포함
- 기호 :
| - 메서드 :
union() - 특징 : 중복 없이 모든 요소가 포함됨
# | 기호로 합집합 구하기
all_subjects = younghee_subjects | cheolsoo_subjects
print("| 기호로 구한 모든 과목:", all_subjects)
# union() 메서드로 합집합 구하기
all_subjects2 = younghee_subjects.union(cheolsoo_subjects)
print("union()으로 구한 모든 과목:", all_subjects2)
✂️ 차집합 (difference)
- 한 집합에서 다른 집합의 요소를 뺀 것
- A-B의 경우 A에는 있지만 B에는 없는 항목을 반환
- 기호 :
- - 메서드 :
difference() - 특징 : 순서가 중요(A-B와 B-A는 다름)
# - 기호로 차집합 구하기
younghee_only = younghee_subjects - cheolsoo_subjects
cheolsoo_only = cheolsoo_subjects - younghee_subjects
print("영희만 좋아하는 과목:", younghee_only)
print("철수만 좋아하는 과목:", cheolsoo_only)
# difference() 메서드로 차집합 구하기
younghee_only2 = younghee_subjects.difference(cheolsoo_subjects)
print("difference()로 구한 영희만의 과목:", younghee_only2)
자료형 변환
자료형 변환의 기본
🔤 str()
- 숫자나 리스트 등을 문자열로 바꿔 주는 함수
- 데이터 출력을 깔끔히 처리하거나 파일에 저장할 때 유용함
- 문자열로 변환해야 다른 문자열과 연결이 가능함
# 학생 정보 출력하기
student_id = 202301
name = "민지"
avg_score = 92.5
# 문자열로 변환하여 정보 출력하기
student_info = "학번: " + str(student_id) + ", 이름: " + name + ", 평균: " + str(avg_score)
print(student_info)
🔢 int()
- 문자열이나 실수를 정수형으로 바꿔 주는 함수
- 문자열이 반드시 숫자로만 구성돼 있어야 함
- 실수의 소수점 아래는 생략됨
# 사용자 나이 계산하기
birth_year_str = "2005"
current_year = 2024
# 문자열을 정수로 변환하여 나이 계산
birth_year = int(birth_year_str)
age = current_year - birth_year
print(f"{birth_year}년생의 나이는 {age}살입니다")
# 실수를 정수로 변환할 때는 소수점 아래가 버려져요
height = 173.7
print(f"키 {height}cm를 정수로 변환하면 {int(height)}cm")
📏 float()
- 나눗셈이나 평균 계산처럼 소수점이 필요한 연산에서 주로 사용되는 함수
# 시험 평균 계산하기
midterm = "78"
final = 84
bonus = 5
total = float(midterm) + float(final) + float(bonus)
final_average = total / 3
print(f"이번 학기 평균: {final_average:.2f}점")
리스트, 튜플, 집합 간의 변환
📜 list()
- 집합이나 튜플을 리스트로 바꿔 주는 함수
- 순서가 있고, 요소를 자유롭게 수정할 수 있기 때문에 데이터를 자유롭게 바꾸거나 순서를 조정하고 싶을 때 사용
# 튜플을 리스트로 변환
score_tuple = (90, 85, 95)
score_list = list(score_tuple)
print("튜플을 리스트로:", score_list)
# 집합을 리스트로 변환
fruit_set = {"사과", "바나나", "딸기"}
fruit_list = list(fruit_set)
print("집합을 리스트로:", fruit_list)
🔗 tuple()
- 리스트나 집합을 튜플로 바꿔 주는 함수
- 데이터 요소를 바꿀 수 없으니 데이터를 확정해두고 변경되지 않도록 고정하고 싶을 때 사용
# 리스트를 튜플로 변환
name_list = ["민지", "하준", "서연"]
name_tuple = tuple(name_list)
print("리스트를 튜플로:", name_tuple)
# 집합을 튜플로 변환
name_set = {"민지", "하준", "서연"}
name_tuple = tuple(name_list)
print("집합을 튜플로:", name_tuple)
🧺 set()
- 리스트나 튜플을 집합으로 바꿔 주는 함수
- 중복을 제거하거나, 여러 데이터에서 교집합·차집합 등을 찾아낼 때 유용
- 순서가 없으므로 순서가 중요치 않은 데이터를 처리할 때 좋음
# 리스트를 집합으로 변환 (중복 제거 효과!)
num_list = [1, 2, 2, 3, 3, 3]
num_set = set(num_list)
print("중복 있는 리스트를 집합으로:", num_set)
# 튜플을 집합으로 변환 (중복 제거 효과!)
num_tuple = (1, 2, 2, 3, 3, 3)
num_set = set(num_tuple)
print("중복 있는 튜플를 집합으로:", num_set)
Leave a comment