set
집합을 표현하는 자료형을 의미한다.
list 와 마찬가지로 여러 타입의 요소들을 저장할 수 있으나, list 와는 달리 세트에 들어가는 요소는 중복될 수 없으며, 만일 동일한 값의 요소가 이미 존재하고 있다면 새로운 요소가 이전의 요소를 치환(replace) 한다.
순서가 정해져있지 않아 indexing 이 되어 있지 않다. 또, 출력할때마다 순서가 다르게 나타나고, 특정 요소만 출력할 수 없다. 세트 안에 또 세트를 만들 수도 없다.
>>> 과일 = {'사과', '딸기', '바나나'}
>>> 과일
{'딸기', '사과', '바나나'}
>>> 과일['딸기']
TypeError: 'set' object is not subscriptable
look up
특정 값이 있는지 확인하기 위해 in 키워드를 사용한다.
#값 in 세트
>>> 과일 = {'사과', '딸기', '바나나'}
>>> '딸기' in 과일
True
>>> '감자' in 과일
False
세트 만들기
>>> a = set('apple')
>>> a
{'e', 'a', 'p', 'l'} # 중복되는 문자는 포함하지 않는다.
>>> b = set(range(3))
>>> b
{0, 1, 2} # 이 경우 순서대로 나온다.
#빈 세트 만들기
>>> c = set()
# c={}라고 만들면 빈 딕셔너리가 만들어진다.
반복문 (for 변수 in 세트: )
세트에는 순서가 없으므로 꺼낼때마다 순서가 달라진다. (단, 숫자로만 이루어진 세트는 순서대로 출력됨)
반복문으로 세트 생성하기
{식 for 변수 in 반복가능한객체} =
set(식 for 변수 in 반복가능한객체)
>>> {i for i in 'berry'}
{'y', 'r', 'e', 'b'} # 중복되는 문자는 제거되어 나온다.
if 조건문으로 세트 생성하기
{식 for 변수 in 세트 if 조건식} =
set(식 for 변수 in 세트 if 조건식)
>>> a = {i for i in 'berry' if i in 'b'}
>>> a
{'b'} # 조건문대로 b만 포함된다.
>>> a = {i for i in 'berry' if i not in 'b'}
>>> a
{'y', 'e', 'r'} # 조건문대로 b만 빠진다.
세트 값 수정하기
add
set.add()
remove
set.remove()
discard
특정 요소를 삭제하고, 해당 요소가 없으면 그냥 넘어간다.
pop
임의의 요소를 삭제하고 해당 요소를 반환한다.
>>> a = {1, 2, 3, 4}
>>> a.pop()
1
>>> a
{2, 3, 4} # 1을 삭제했다.
# pop(n) 이라고 쓸 경우 에러가 발생한다.
clear
세트와 집합의 method
합집합(union) : |
>>> a = {1, 2, 3}
>>> b = {3, 4, 5}
>>> a | b # set.union(a, b)를 써도 같다.
{1, 2, 3, 4, 5}
교집합(intersection) : &
>>> a & b # set.intersection(a, b)를 써도 같다.
{3}
차집합(difference) : -
>>> a - b # set.difference(a, b)를 써도 같다.
{1, 2}
대칭차집합(symmetric difference) : ^
>>> a ^ b # set.symmetric_difference(a, b)를 써도 같다.
{1, 2, 4, 5}
세트가 같은지 다른지 확인하기 (T/F)
== 연산자는 같은지 확인할 때, ! 연산자는 다른지 확인할 때 사용한다.
cf) disjoint : 세트 내에 겹치는 요소가 있는지 확인한다.
겹치는 요소가 없으면 T, 있으면 F
>>> a = {1, 2, 3, 4}
>>> a.isdisjoint({5, 6})
True
>>> a.isdisjoint({3, 4})
False
집합 연산 후 할당 연산자 사용하기
세트1 |= 세트2
현재 세트에 다른 세트(세트2)를 더한다.
세트1.update(세트2) 와 같다.
>>> a = {1,2,3}
>>> a |= {4}
>>> a
{1, 2, 3, 4}
>>> a.update({5})
{1, 2, 3, 4, 5}
세트1 &= 세트2
현재 세트와 다른 세트 중에서 겹치는 요소만 현재 세트에 저장한다.
세트1.intersection_update(세트2) 와 같다.
>>> a = {1, 2, 3, 4}
>>> a &= {3, 4, 5, 6}
>>> a
{3, 4}
세트1 -= 세트2
현재 세트에서 다른 세트를 뺀다.
세트1.difference_update(세트2) 와 같다.
>>> a = {1, 2, 3, 4}
>>> a -= {3, 4}
>>> a
{1, 2}
세트1 ^= 세트2
현재 세트와 다른 세트 중 겹치지 않는 요소만 현재 세트에 저장한다.
세트1.symmetrric_difference_update(세트2) 와 같다.
>>> a = {1, 2}
>>> a.symmetric_difference_update({2 ,3 ,4})
>>> a
{1, 3, 4}
현재세트 <= 다른세트
현재 세트가 다른 세트의 부분집합인지 확인한다. (T/F)
현재세트.issubset(다른세트) 와 같다.
등호가 없을때에는 진부분집합일때만 성립하며 method는 따로 없다.
현재세트 >= 다른세트
현재 세트가 다른 세트의 상위집합인지 확인한다. (T/F)
현재세트.issuperset(다른세트) 와 같다.
등호가 없을때에는 진상위집합일때만 성립하며 method는 따로 없다.
할당과 복사
dictionary 처럼 copy method를 사용해야 한다.
# 단순 할당 시,
>>> a = {1, 2, 3}
>>> b = a
>>> a is b
True
# 이 경우 한 쪽을 수정하면 반대쪽에도 반영된다 (dic과 같다)
#copy method 사용 시,
>>> a = {1, 2, 3}
>>> b = a.copy()
>>> a == b
True
>>> a is b
False
set를 이용하여 공배수 구하기
>>> a = {i for i in range(1, 101) if i % 3 == 0}
# 1~100 까지의 숫자 중 3 으로 나눴을 때 0이 나오는 수
>>> b = {i for i in range(1, 101) if i % 5 == 0}
>>> print(a & b)
{75, 45, 15, 90, 60, 30}
'python' 카테고리의 다른 글
array & tuple & set (0) | 2021.04.27 |
---|---|
args & kwargs (0) | 2021.04.27 |
dictionary (0) | 2021.04.27 |
list (0) | 2021.04.27 |
if & while (0) | 2021.04.27 |