- Python은 여러 값을 갖는 컨테이너 자료형 제공
- 리스트(List) : 대괄호 사용 ex) [0,1,2,3]
- 튜플(Tuple) : 소괄호 사용 ex) (0,1,2,3)
- 집합(Set) : 중괄호 사용 ex) {0,1,2,3}
- 딕셔너리(Dictionary) : {key : value} 형식으로 사용 ex) {'이름':'홍길동', '지역':'Seoul'}
3.3 집합(Set)
- 중괄호({})안에 값을 입력하며, 값을 원소라고 함
- 집합 연산(교집합, 합집합, 차집합, 대칭 차집합) 사용 가능
- 중복x (중복된 원소는 하나만 제외하고 모두 없어짐)
- 원소의 순서는 의미가 없어 인덱싱 불가
# 집합 생성
se1 = {1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 'e'}
se1
{1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 'e'}
=> 문자열도 집합 생성 가능하고 혼합하여 사용 가능
3.3.1 집합 변환
- 문자열 → 집합
se2 = set('안녕하세요')
se2
{'안', '녕', '하', '세', '요'}
- range() → 집합
se3 = set(range(0, 11))
se3
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
- 리스트 → 집합
li1 = ['a', 'b', 'c', 'd', 'e', 'a', 'a', 'b']
se4 = set(li1)
se4
{'a', 'b', 'c', 'd', 'e'}
=> 집합으로 변환 시 중복 제거 됨
- 튜플 → 집합
tu1 = ('a', 'b', 'c', 'd', 'e', 'a', 'a', 'b')
se5 = set(tu1)
se5
{'a', 'b', 'c', 'd', 'e'}
=> 집합으로 변환 시 중복 제거 됨
** 중복 제거
# list(set()) 중복제거
li1 = ['a', 'b', 'c', 'd', 'e', 'a', 'a', 'b']
1i2 = list(set(li1))
print(1i2)
# tuple(set()) 중복제거
tu1 = ('a', 'b', 'c', 'd', 'e', 'a', 'a', 'b')
tu2 = tuple(set(tu1))
print(tu2)
['a', 'b', 'c', 'd', 'e']
('a', 'b', 'c', 'd', 'e')
=> 리스트/튜플 내 중복을 제거하기 위해 집합으로 변경 후 다시 리스트/튜플로 변경함
3.3.2 원소 확인 ( len(), in )
se6 = {'a', 'b', 'c', 'd', 'e'}
se7 = {'a', 'b', 'c'}
# len() : 원소 개수
print(len(se6), len(se7)
# 특정원소 in 집합 : 집합내 특정원소 확인
print('a' in se6)
5 3
True
=> 특정원소가 있으면 True, 없으면 False 출력
3.3.3 집합 연산 (합집합, 교집합, 차집합, 대칭 차집합)
밴다이어그램으로 집합연산 이해하기
- 합집합(union)
A = {'강남','강서','동대문','관악','노원'}
B = {'동대문','관악','종로','구로'}
# 합집합 방법 2가지
u1 = A|B
u2 = A.union(B)
print(u1)
print(u2)
{'동대문', '종로', '노원', '구로', '강남', '강서', '관악'}
{'동대문', '종로', '노원', '구로', '강남', '강서', '관악'}
- 교집합(intersection)
# 교집합 방법 2가지
i1 = A&B
i2 = A.intersection(B)
print(i1)
print(i2)
{'관악', '동대문'}
{'관악', '동대문'}
- 차집합(difference)
# 차집합 방법 2가지
d1 = A - B
d2 = A.difference(B)
print(d1)
print(d2)
{'강서', '노원', '강남'}
{'강서', '노원', '강남'}
- 대칭 차집합(symmetric_difference)
# 대칭 차집합 2가지 방법
s_d1 = A^B
s_d2 = A.symmetric_difference(B)
print(s_d1)
print(s_d2)
{'종로', '구로', '노원', '강남', '강서'}
{'종로', '구로', '노원', '강남', '강서'}
** 응용
- n1, n2 리스트 중복 없이 합쳐서 출력
n1 = [1, 2, 3, 4, 5, 6, 7]
n2 = [5, 6, 7, 8, 9, 10]
li1 = list(set(n1)|set(n2))
print(li1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- n1, n2 리스트 중복 요소만 출력
n1 = [1, 2, 3, 4, 5, 6, 7]
n2 = [5, 6, 7, 8, 9, 10]
li2 = list(set(n1)&set(n2))
print(li2)
[5, 6, 7]
3.3.3 집합 메소드 - add(), update(), pop(), remove(), discard(), clear()
- add() : 원소 추가 ( 리스트에서는 append() )
C = {'모니터','마우스','노트북','핸드폰'}
# add()
C.add('USB')
print(C)
{'마우스', '노트북', 'USB', '핸드폰', '모니터'}
=> 집합은 순서대로 들어가지 않음
- update() : 여러 원소 추가 (변경하는 것이 아님)
C = {'모니터','마우스','노트북','핸드폰'}
# update()
C.update(['키보드','스피커'])
print(C)
{'키보드', '마우스', '노트북', '핸드폰', '모니터', '스피커'}
=> 키보드, 스피커 2개의 원소를 추가함
- pop() : 무작위 원소 제거 ( 특정 요소가 아닌 램덤 )
C = {'모니터','마우스','노트북','핸드폰'}
# pop()
p1 = C.pop()
print(C)
print(p1)
{'노트북', '모니터', '핸드폰'}
마우스
- remove() : 특정 원소 삭제
C = {'모니터','마우스','노트북','핸드폰'}
# remove()
C.remove('마우스')
print(C)
{'노트북', '모니터', '핸드폰'}
=> 없는 원소를 제거하면 오류 발생
# 위 코드에서 마우스를 제거한 상태
C.remove('마우스')
print(C)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_19408\1035702983.py in <module>
1 # 위 코드에서 마우스를 제거한 상태
----> 2 C.remove('마우스')
3 print(C)
KeyError: '마우스'
- discard() : 특정 원소 삭제, 없으면 무시
# 위 코드에서 마우스를 제거한 상태
C.discard('마우스')
print(C)
{'노트북', '모니터', '핸드폰'}
=> 마우스가 없지만 오류가 발생하지 않고 집합 C 출력
- clear() : 모든 원소 삭제
# 모든 원소삭제
C = {'모니터','마우스','노트북','핸드폰'}
print(C)
# clear()
C.clear()
print(C)
set()
'Python 파이썬' 카테고리의 다른 글
파이썬 제어문(1) - if 문 (0) | 2023.02.09 |
---|---|
파이썬 기초(3-4) - 딕셔너리(Dictionary) (0) | 2023.02.09 |
파이썬 기초(3-2) - 튜플(Tuple) (0) | 2023.02.08 |
파이썬 기초(3-1) - 리스트(List) (0) | 2023.02.07 |
파이썬 기초(2-1) - 문자열 (0) | 2023.02.05 |