일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 강화학습
- 김성훈 교수님
- Laplacian
- reinforcement learning
- convex optimization
- ML-Agent
- Hessian Matrix
- 사이킷런
- 유니티
- rl
- 딥러닝
- pandas
- 논문
- Series
- paper
- David Silver
- 판다스
- 데이터 분석
- Jacobian Matrix
- unity
- Deep Learning
- list
- machine learning
- Linear algebra
- statistics
- neural network
- 리스트
- 모두를 위한 RL
- Python Programming
- optimization
RL Researcher
14. Set(집합) 본문
1. Set(집합)
-
set은 수학에서 이야기하는 집합과 비슷합니다.
-
순서가 없고, 집합안에서는 unique한 값을 가집니다.
-
그리고 mutable 객체입니다.
-
중괄호를 사용하는 것은 dictionary와 비슷하지만, key가 없습니다. 값만 존재합니다.
s = {3, 5, 7}
print(s)
print(type(s))
========================================================================
<output>
{3, 5, 7}
<class 'set'>
-
set(집합) 내부 원소는 다양한 값을 함께 가질 수 있지만, mutable한 값은 가질수 없습니다.
s = {"1", 3, 5, (1,3)}
print(s)
========================================================================
<output>
{(1, 3), 5, 3, '1'}
s = {"1", 3, 5, [1,3]}
========================================================================
<output>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
s = {"1", 3, 5, {1,3}}
========================================================================
<output>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
s = {"1", 3, 5, {1:1,3:3}}
========================================================================
<output>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
s = {"1", 3, 5, frozenset([1,3,4])}
print(s)
========================================================================
<output>
{5, 3, '1', frozenset({1, 3, 4})}
2. Set(집합) 선언
-
list나 dict의 경우 대괄호나 중괄호로 선언할 수 있었습니다만, set은 dict타입과 동일한 중괄호를 사용하므로, 중괄호만으로는 생성할 수 없습니다.
-
set 생성자를 이용합니다.
s = {}
print(type(s))
s = set()
print(type(s))
print(s)
========================================================================
<output>
<class 'dict'>
<class 'set'>
set()
-
set 생성자에 iterable한 객체를 넣으면 변환하여 set을 만들어 줍니다.
-
물론 set생성자 없이 바로 중괄호 안에 값을 넣어도 됩니다.
s = set([1,3,5,7])
print(s)
p = {1, 3, 5, 7}
print(p)
========================================================================
<output>
{1, 3, 5, 7}
{1, 3, 5, 7}
-
중복된 값은 자동으로 중복이 제거 됩니다.
s = {1, 5, 1, 1, 1, 3, 7}
print(s)
========================================================================
<output>
{1, 3, 5, 7}
-
set(집합)은 순서가 없습니다. 어떤 값이 먼저 나올지 알 수 없습니다.
for i in {1, 2, 4, 8, 16,32}:
print(i)
========================================================================
<output>
32
1
2
4
8
16
3. Set(집합)의 in
-
다른 collection 타입과 동일하게 동작 합니다.
print(2 in r)
print(3 in r)
print(3 not in r)
========================================================================
<output>
True
False
True
4. Set(집합)의 원소 추가
-
원소 추가는 add 메소드를 이용합니다.
k = {100, 105}
k.add(50)
print(k)
k.add(12)
print(k)
========================================================================
<output>
{105, 50, 100}
{105, 50, 100, 12}
5. Set(집합)의 update
-
dictionary의 update는 여러값을 수정 또는 추가할때 사용했습니다만, set은 중복은 자동으로 제거되고 수정이라는 개념보다, 여러데이터를 한번에 추가할 때 사용합니다.
k = {1, 2, 3}
k.update([3, 4, 5])
print(k)
========================================================================
<output>
{1, 2, 3, 4, 5}
6. Set(집합)의 원소 제거
-
remove(item) : item에 해당하는 원소를 제거하고, 없으면 KeyError 발생
k = {1, 2, 3}
k.remove(3)
print(k)
========================================================================
<output>
{1, 2}
k.remove(3)
========================================================================
<output>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 3
-
discard(item) : item에 해당하는 원소를 제거하고, 없어도 에러발생하지 않음
k = {1, 2, 3}
k.discard(3)
print(k)
k.discard(3)
print(k)
========================================================================
<output>
{1, 2}
{1, 2}
7. set(집합)의 복사
-
set 내부의 값은 불변의 값만 들어올 수 있기때문에.. 얕은 복사와 깊은 복사의 구분이 필요 없을것 같지만... 일단 set의 메소드인 copy는 얕은 복사에 해당합니다.
s = {1, 3, 5}
t = s.copy()
print(s)
print(t)
print(id(s))
print(id(t))
========================================================================
<output>
{1, 3, 5}
{1, 3, 5}
4334668264
4334666696
-
dictionary 처럼 생성자로 복사할 수 있습니다.
s = {1, 3, 5}
t = set(s)
print(s)
print(t)
print(id(s))
print(id(t))
========================================================================
<output>
{1, 3, 5}
{1, 3, 5}
4334666248
4334667144
8. Set(집합) 연산 - 연산자
-
| - 합집합 연산자
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
c = a | b
print(a)
print(b)
print(c)
========================================================================
<output>
{1, 2, 3, 4, 5}
{3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
-
& : 교집합 연산자
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
c = a & b
print(a)
print(b)
print(c)
========================================================================
<output>
{1, 2, 3, 4, 5}
{3, 4, 5, 6, 7}
{3, 4, 5}
-
- : 차집합 연산자
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
c = a - b
print(a)
print(b)
print(c)
========================================================================
<output>
{1, 2, 3, 4, 5}
{3, 4, 5, 6, 7}
{1, 2}
-
^ : 대칭차집합 연산자(합집합 - 교집합)
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
c = a ^ b
print(a)
print(b)
print(c)
========================================================================
<output>
{1, 2, 3, 4, 5}
{3, 4, 5, 6, 7}
{1, 2, 6, 7}
-
|=, &=, -=, ^= : = 과 조합함으로써 연산과 동시에 할당합니다.
-
id 또한 변경되지 않습니다.
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
a |= b
print(a)
print(b)
========================================================================
<output>
{1, 2, 3, 4, 5, 6, 7}
{3, 4, 5, 6, 7}
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
print(id(a))
a &= b
print(a)
print(id(a))
========================================================================
<output>
4334668040
{3, 4, 5}
4334668040
9. Set(집합) - 연산 메소드
-
union - 합집합
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
c = a.union(b)
print(a)
print(b)
print(c)
========================================================================
<output>
{1, 2, 3, 4, 5}
{3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
-
intersection - 교집합
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
c = a.intersection(b)
print(a)
print(b)
print(c)
========================================================================
<output>
{1, 2, 3, 4, 5}
{3, 4, 5, 6, 7}
{3, 4, 5}
-
difference - 차집합
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
c = a.difference(b)
print(a)
print(b)
print(c)
========================================================================
<output>
{1, 2, 3, 4, 5}
{3, 4, 5, 6, 7}
{1, 2}
-
symmetric_difference : 대칭차집합 연산자(합집합 - 교집합)
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
c = a.symmetric_difference(b)
print(a)
print(b)
print(c)
========================================================================
<output>
{1, 2, 3, 4, 5}
{3, 4, 5, 6, 7}
{1, 2, 6, 7}
10. Set(집합) - 기타 메소드
-
issubset : 부분집합 여부 확인
a = {1, 2, 3, 4, 5}
b = {1, 2, 3}
print(a.issubset(b))
print(b.issubset(a))
========================================================================
<output>
False
True
-
issuperset : issubset과 반대 superset인지 확인
a = {1, 2, 3, 4, 5}
b = {1, 2, 3}
print(a.issuperset(b))
print(b.issuperset(a))
========================================================================
<output>
True
False
-
isdisjoint : 교집합이 없으면 True, 있으면 False
a = {1, 2, 3}
b = {4, 5, 6}
print(a.isdisjoint(b))
c = {1, 2, 3}
d = {3, 4, 5}
print(c.isdisjoint(d))
========================================================================
<output>
True
False
'AI Basic > Python Programming' 카테고리의 다른 글
05. for in 반복문, Range, enumerate (0) | 2021.01.04 |
---|---|
13. Dictionary(딕셔너리) (0) | 2021.01.03 |
12. 튜플(tuple) (0) | 2021.01.03 |
15. 함수(function) (0) | 2020.12.27 |
11. 리스트(List) - 5 - 리스트 정렬 (0) | 2020.12.25 |