집합 생성에는 중괄호 또는 내장 함수를 사용한다.
my_set = {"apple", "banana", "cherry"}
print(my_set)
{'banana', 'apple', 'cherry'}
# 집합(set) 함수를 이용해 생성하거나
# 리스트, 튜플, 문자열 등을 set() 함수의 인자값으로 사용해 생성한다.
my_set_2 = set(["one", "two", "three"])
my_set_2 = set(("one", "two", "three"))
print(type(my_set_2))
print(my_set_2)
<class 'set'>
{'three', 'one', 'two'}
my_set_3 = set("aaabbbcccdddeeeeeffff")
print(my_set_3)
<class 'set'>
{'c', 'b', 'e', 'a', 'f', 'd'}
# 중의 : 빈 집합(set) 생성 시 {}를 사용할 수 없음. {} 사용 시 딕셔너리로 간주됨.
# 빕 집합(set) 생성에는 내장 함수(set()) 이용해 생성.
a = {}
print(type(a))
a = set()
print(type(a))
<class 'dict'>
<class 'set'>
my_set = set()
# add() 메소드를 이용해 항목을 추가함.
my_set.add(42)
my_set.add(True)
my_set.add("Hello")
# 주의 : 항목 추가 시 순서가 정해지지 않기 때문에
# 결과값 추력시 삽입 순서와 다르게 나온다.
print(my_set)
{True, 42, 'Hello'}
# 샵입할 항목이 존재할 경우 집합(set)에 아무런 변화도 생기지 않는다.
my_set.add(42)
print(my_set)
{True, 42, 'Hello'}
# remove(x): x는 제거될 항목,
# 만약 제거될 항목이 존재하지 않으면 KeyError 발생
my_set = {"apple", "banana", "cherry"}
my_set.remove("apple")
print(my_set)
{'banana', 'cherry'}
# KeyError:
# my_set.remove("orange")
Traceback (most recent call last):
File "c:\workspace\test.py", line 3, in <module>
my_set.remove("orange")
KeyError: 'apple'
# discard(x): x는 제거될 항목,
# 만약 제거될 항목이 존재하지 않으면 아무일도 일어나지 않는다.
my_set.discard("cherry")
my_set.discard("blueberry")
print(my_set)
# clear() : 모든 항목 제거
my_set.clear()
print(my_set)
# pop() : 무작위로 선택된 값이 반환하고 제거하다.
a = {True, 2, False, "hi", "hello"}
print(a.pop())
print(a)
False
{True, 2, 'hi', 'hello'}
my_set = {"apple", "banana", "cherry"}
if "apple" in my_set:
print("yes")
yes
# 집합(set)에서 반복문 사용항 시 for in loop 문을 사용한다.
# 주의: 항목의 순서는 고려되지 않는다.
my_set = {"apple", "banana", "cherry"}
for i in my_set:
print(i)
cherry
apple
banana
odds = {1, 3, 5, 7, 9}
evens = {0, 2, 4, 6, 8}
primes = {2, 3, 5, 7}
# union() : 중복 없이 두 집합을 합집합을 반환한다.
# 이렇게 해도 두 집합은 변경되지 않습니다.
u = odds.union(evens)
print(u)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
# intersection(): 두 집합 간의 차집합을 반환한다.
i = odds.intersection(evens)
print(i)
set()
i = odds.intersection(primes)
print(i)
{3, 5, 7}
i = evens.intersection(primes)
print(i)
{2}
setA = {1, 2, 3, 4, 5, 6, 7, 8, 9}
setB = {1, 2, 3, 10, 11, 12}
# difference() : 집합B에 존재하지 않는 집합A의 모든 항목을 반환한다.
diff_set = setA.difference(setB)
print(diff_set)
{4, 5, 6, 7, 8, 9}
# A.difference(B)와 B.difference(A)는 결과값이 다르다.
diff_set = setB.difference(setA)
print(diff_set)
# symmetric_difference() : 집합 A와 집합 B에 있지만 둘 다에 있지 않은 모든 요소을 반환합니다.
diff_set = setA.symmetric_difference(setB)
print(diff_set)
# A.symmetric_difference(B)와 B.symmetric_difference(A)의 결과 값은 같다.
diff_set = setB.symmetric_difference(setA)
print(diff_set)
setA = {1, 2, 3, 4, 5, 6, 7, 8, 9}
setB = {1, 2, 3, 10, 11, 12}
# update() : 다른 집합의 요소를 추가해서 집합을 갱신함.
setA.update(setB)
print(setA)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
# intersection_update() : 두 집합 간에 공통으로 존재하는 항목 반환(교집합)
setA = {1, 2, 3, 4, 5, 6, 7, 8, 9}
setA.intersection_update(setB)
print(setA)
{1, 2, 3}
# difference_update() : 두 집합 간에 한 집합에는 존재하고
# 다른 집합에는 존재하는 않는 모든 항목 반환.(차집합)
setA = {1, 2, 3, 4, 5, 6, 7, 8, 9}
setA.difference_update(setB)
print(setA)
{4, 5, 6, 7, 8, 9}
# symmetric_difference_update() : 두 집합 간 교집합의 결과값을 제외한 모든 항목 반환.
setA = {1, 2, 3, 4, 5, 6, 7, 8, 9}
setA.symmetric_difference_update(setB)
print(setA)
# 중요 : 집합의 갱신 함수들은 다른 반복 가능한(iterable) 타입(리스트, 튜플 등)등을
# 인자로 사용하여도 동일한 결과 값을 얻을 수 있다.
# setA.update([1, 2, 3, 4, 5, 6])
{1, 2, 3, 4, 5, 6, 7, 8, 9}
set_org = {1, 2, 3, 4, 5}
# 다음과 같은 경우 단순히 참조만 복사했기 때문에 주의를 요한다.
# (set_copy를 변경할 경우 set_org에도 변경이 일어남!)
set_copy = set_org
# 복사된 set_copy에 수정이 일어나면 원본 set_org에도 똑같이 영향을 미침.
set_copy.update([3, 4, 5, 6, 7])
print(set_copy)
print(set_org)
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
# copy() 함수를 이용해 집합(set)을 생성할 경우
# 원본과 동일한 집합이 새로 만들어짐.
set_org = {1, 2, 3, 4, 5}
set_copy = set_org.copy()
# copy() 함수를 이용해 새로 생성된 집합을 갱신할 경우
# 원본 집합에 영향을 주지 않음.(왜? 원본과 다른 새로운 집합이기 때문에)
set_copy.update([3, 4, 5, 6, 7])
print(set_copy)
print(set_org)
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5}
setA = {1, 2, 3, 4, 5, 6}
setB = {1, 2, 3}
# issubset(setX): 임의의 집합(set)에 집합(setX)가 부분집합이면 true를 리턴한다.
print(setA.issubset(setB)) # setA가 setB의 부분집합인가?
print(setB.issubset(setA)) # setB가 setA의 부분집합인가?
False
True
# issuperset(setX): 임의의 집합(set)에 집합(setX)가 확대집합이면 true를 리턴한다
print(setA.issuperset(setB)) # setA가 setB의 확대집합인가?
print(setB.issuperset(setA)) # setB가 setA의 확대집합인가?
True
False
# isdisjoint(setX) : 임의의 집합(set)와 집합(setX)가 공통원소 존재하지 않으면 true를 반환한다.
setC = {7, 8, 9}
print(setA.isdisjoint(setB)) # setA와 setB는 공통원소가 존재하지 않는다.
print(setA.isdisjoint(setC)) # setA와 setC는 공통원소가 존재하지 않는다.
False
True
일반적인 집합(set)과 다르게 frozenset는 한 번 항목들을 가지고 집합(set)이 만들어 지면 처음 만들어진 항목들을 변경할 수 없다.
a = frozenset([0, 1, 2, 3, 4])
# 다음 함수들은 frozenset에 사용할 수 없다.
# a.add(5)
# a.remove(1)
# a.discard(1)
# a.clear()
#에러 발생
Traceback (most recent call last):
File "c:\workspace\test.py", line 3, in <module>
a.add(5)
AttributeError: 'frozenset' object has no attribute 'add'
# 갱신 함수 또한 사용할 수 없다.:
# a.update([1,2,3])
#에러 발생
Traceback (most recent call last):
File "c:\workspace\test.py", line 3, in <module>
a.update([1,2,3])
AttributeError: 'frozenset' object has no attribute 'update'
# 사용 가능한 함수들
odds = frozenset({1, 3, 5, 7, 9})
evens = frozenset({0, 2, 4, 6, 8})
print(odds.union(evens)) #합집합
print(odds.intersection(evens)) #교집합
print(odds.difference(evens)) #차집합
frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
frozenset()
frozenset({1, 3, 5, 7, 9})
파이썬 시작하기 - 파이썬 소개 (0) | 2023.10.21 |
---|---|
파이썬 - 문자열(Strings) (0) | 2021.02.16 |
파이썬 - 딕셔너리(Dictionary) 자료형 (0) | 2021.02.10 |
파이썬 - 튜플(tuple) 자료형 (0) | 2021.02.09 |
파이썬 - 리스트(list) 자료형 (0) | 2021.02.08 |
댓글 영역