set() 함수 사용
- 중복제거를 하고 싶을 때, set() 함수를 사용한다.
- set(i) 함수는 집합으로 만들어주는 함수이며 i의 값은 iterable 형식을 집합 객체로 반환해 준다.
- 이때 iterable 형식은 딕셔너리의 키나 집합의 멤버로 사용할 수 있는 객체여야 한다.
#list 를 set() 로 변환하면 집합으로 반환하면서 중복제거한다.
a = [2,1,3,4,5,5,6,7,3]
print(a) # [2, 1, 3, 4, 5, 5, 6, 7, 3]
print(len(a)) # 9
print(set(a)) # {1, 2, 3, 4, 5, 6, 7}
print(len(set(a))) # 7
b = ['lee', 'yun', 'park', 'yun', 'bang', 'lee']
print(b) # ['lee', 'yun', 'park', 'yun', 'bang', 'lee']
print(len(b)) # 6
print(set(b)) # {'bang', 'yun', 'lee', 'park'}
print(len(set(b))) # 4
- set() 함수 사용하여 중복제거한 다음에는 다시 리스트로 형변환하여 사용한다.
#set 함수로 변환하여 중복제거한 후 다시 list 로 형변환하여 사용
#다시 list 형변환
chga = list(set(a))
print(chga) # [1, 2, 3, 4, 5, 6, 7]
chgb = list(set(b))
print(chgb) # ['yun', 'park', 'lee', 'bang']
- set 함수 기타 연산 메서드
a = ['lee', 'yun', 'park']
b = ['yun', 'bang', 'lee']
#교집합
c = set(a).intersection(b)
print(c) # {'yun', 'lee'}
#합집합
d = set(a).union(b)
print(d) # {'lee', 'bang', 'yun', 'park'}
#차집합
e = set(a).difference(b)
f = set(b).difference(a)
print(e) # {'park'}
print(f) # {'bang'}
set(), frozenset() 함수 차이점
- set() 함수와 frozenset() 함수는 동일한 기능을 가지고 있으나 값을 추가할 수 있는지 없는지가 주요 차이점이다.
- set() 은 가변함수, frozenset() 은 불변함수
ad = set(a)
ad.add('bang') # 요소 추가
print(ad) # {'lee', 'yun', 'park', 'bang'}
fd = frozenset(b)
fd.add('bang') # AttributeError: 'frozenset' object has no attribute 'add'
▶ set 연습 백준 문제풀이
https://www.acmicpc.net/problem/2776
import sys
T = int(sys.stdin.readline().rstrip())
for i in range(0, T):
cnt1 = int(sys.stdin.readline().rstrip())
memo1 = set(map(int,sys.stdin.readline().rsplit()))
cnt2 = int(sys.stdin.readline().rstrip())
memo2 = list(map(int,sys.stdin.readline().rsplit()))
for j in memo2:
if j in memo1:
print(1)
else:
print(0)
☞ 파이썬 자습서 참고 사이트
https://docs.python.org/ko/3/library/stdtypes.html#set
'코딩라이브러리 > 파이썬' 카테고리의 다른 글
백준 2164 큐, deque 연습 (0) | 2024.05.31 |
---|---|
파이썬 스택, 큐 deque (with 백준 18258) (0) | 2024.05.30 |
파이썬 Counter (with 백준 10815, 10816) (0) | 2024.05.28 |
파이썬 람다 함수 lambda (with 백준 1181) (0) | 2024.05.27 |
파이썬 정렬 sort, sorted (with 백준 2750, 5597, 1181) (0) | 2024.05.24 |