AI & BigData/Python Basics
#25 - 파이썬 기초 실습 - 집합(Sets) - 1
iot파이썬
2020. 2. 5. 08:02
파이썬 기초 실습 - 집합(Sets) - 1¶
데이타 타입¶
* 집합(Sets) 자료형
In [1]:
{1,2,3}
Out[1]:
{1, 2, 3}
In [2]:
s = set([1,2,3])
print(s)
{1, 2, 3}
In [3]:
print(list(s))
[1, 2, 3]
In [4]:
{1,2,3,1,2,1,2,3,3,3,3,2,2,2,1,1,2}
Out[4]:
{1, 2, 3}
In [5]:
# 세트의 표현
set_a= set('aabbccddeeffgg') # 문자열이 들어가도 중복을 처리한다.
set_a
Out[5]:
{'a', 'b', 'c', 'd', 'e', 'f', 'g'}
In [6]:
set_a = set([1,2,3,4,5,5,5]) # 숫자의 중복도 처리한다.
set_a
Out[6]:
{1, 2, 3, 4, 5}
In [7]:
set_a = set((1,2,3,4,5,5,5)) # 튜플이라도 중복을 처리한다.
set_a
Out[7]:
{1, 2, 3, 4, 5}
In [8]:
set_a = set({1:11,2:22,3:33,1:44,2:55,3:66}) # 사전타입이 들어가도 중복을 처리한다.
set_a
Out[8]:
{1, 2, 3}
In [9]:
set_a = set(['aaaaa', 'aaaaa', 'bbbbb', 'ccccc', 'aaaaa']) # 동일한 String이 2개이면서 동시에 내용도 set_a의 중복이 일어난 경우의 set
set_a
Out[9]:
{'aaaaa', 'bbbbb', 'ccccc'}
In [10]:
# 두 가지 객체가 들어갔을 때 세트의 표현
set_a = set([1,2,3],[4,5,6]) # set() 안에는 하나의 매개변수만 들어가야 한다.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-c355d558cf58> in <module>
1 # 두 가지 객체가 들어갔을 때 세트의 표현
----> 2 set_a = set([1,2,3],[4,5,6]) # set() 안에는 하나의 매개변수만 들어가야 한다.
TypeError: set expected at most 1 arguments, got 2
In [11]:
a = [[1,2,3],[4,5,6]]
set_a = set(a) # set() 안에는 하나의 매개변수만 들어가야 한다.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-fd061d1c86f0> in <module>
1 a = [[1,2,3],[4,5,6]]
----> 2 set_a = set(a) # set() 안에는 하나의 매개변수만 들어가야 한다.
TypeError: unhashable type: 'list'
In [12]:
set_a = set(['aabb', 'ccdd'])
set_a
Out[12]:
{'aabb', 'ccdd'}
In [13]:
# 비어있는 세트 표현
set_a = set()
set_a
Out[13]:
set()
In [14]:
# 세트의 시퀀스 자료형 연산
# 시퀀스 자료형이 아니므로 인덱싱, 슬라이싱, 정렬 등이 없다.
set_a = set([1,2,3,4,5,6,7,8,9])
set_a[0]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-efbfb447fd1c> in <module>
2 # 시퀀스 자료형이 아니므로 인덱싱, 슬라이싱, 정렬 등이 없다.
3 set_a = set([1,2,3,4,5,6,7,8,9])
----> 4 set_a[0]
TypeError: 'set' object is not subscriptable
1. 세트의 연산 ( 집합 관계 연산)¶
- 합집합
In [15]:
set_a = set([1,2,3,4,5,6])
set_b = set([3,4,5,6,7,8])
set_a | set_b
Out[15]:
{1, 2, 3, 4, 5, 6, 7, 8}
In [16]:
set_a.union(set_b)
Out[16]:
{1, 2, 3, 4, 5, 6, 7, 8}
In [17]:
set_a.union(set_a)
Out[17]:
{1, 2, 3, 4, 5, 6}
- 교집합
In [18]:
set_a = set([1,2,3,4,5,6])
set_b = set([3,4,5,6,7,8])
set_a & set_b # {3, 4}. 교집합만 구하였다.
Out[18]:
{3, 4, 5, 6}
In [19]:
set_a.intersection(set_b) # {3, 4}. 위와 마찬가지
Out[19]:
{3, 4, 5, 6}
- 차집합
In [20]:
set_a = set([1,2,3,4,5,6])
set_b = set([3,4,5,6,7,8])
set_a - set_b
Out[20]:
{1, 2}
In [21]:
set_a.difference(set_b) # {1, 2}.
Out[21]:
{1, 2}
- 대칭 차집합 - 교집합만 제외
In [22]:
set_a = set([1,2,3,4,5,6])
set_b = set([3,4,5,6,7,8])
set_a ^ set_b
Out[22]:
{1, 2, 7, 8}
In [23]:
set_a.symmetric_difference(set_b)
Out[23]:
{1, 2, 7, 8}
2. 집합 관계 연산 저장¶
- 합집합의 저장
In [24]:
set_a = set([1,2,3,4,5,6])
set_b = set([3,4,5,6,7,8])
set_a |= set_b
In [25]:
set_a.update(set_b) # 합집합 연산의 결과를 a에 저장한다.
set_a
Out[25]:
{1, 2, 3, 4, 5, 6, 7, 8}
- 교집합의 저장
In [26]:
set_a = set([1,2,3,4,5,6])
set_b = set([3,4,5,6,7,8])
set_a &= set_b # 교집합을 a에 저장한다.
set_a
Out[26]:
{3, 4, 5, 6}
In [27]:
set_a.intersection_update(set_b) # 교집합을 a에 저장한다.
set_a
Out[27]:
{3, 4, 5, 6}
- 차집합의 저장
In [28]:
set_a = set([1,2,3,4,5,6])
set_b = set([3,4,5,6,7,8])
set_a -= set_b # 차집합의 결과를 a에 저장한다.
set_a
Out[28]:
{1, 2}
In [29]:
set_a.difference_update(set_b) # 차집합의 결과를 a에 저장한다.
set_a
Out[29]:
{1, 2}
- 대칭차집합의 저장
In [30]:
set_a = set([1,2,3,4,5,6])
set_b = set([3,4,5,6,7,8])
set_a ^= set_b # 대칭차집합의 결과를 a에 저장한다.
set_a
Out[30]:
{1, 2, 7, 8}
In [31]:
set_a.symmetric_difference_update(set_b) # 대칭차집합의 결과를 a에 저장한다.
set_a
Out[31]:
{1, 2, 3, 4, 5, 6}
세트의 삭제와 동등 비교¶
- 세트의 삭제
In [32]:
set_a = set([1,2,3,4,5,6,7,8,9])
del set_a
set_a
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-32-fca57957666d> in <module>
1 set_a = set([1,2,3,4,5,6,7,8,9])
2 del set_a
----> 3 set_a
NameError: name 'set_a' is not defined
- 동등 비교
In [33]:
set_a = set([4,5,6,10,20,30])
set_b = set_a
set_a == set_b
Out[33]:
True
In [34]:
set_a is set_b
Out[34]:
True
In [35]:
id(set_a) == id(set_b)
Out[35]:
True
In [36]:
set_c = set_a.copy()
set_a == set_c
Out[36]:
True
In [37]:
set_a is set_c
Out[37]:
False
In [38]:
id(set_a) == id(set_c)
Out[38]:
False
자료형을 통한 세트 적용¶
- 세트의 리스트 인덱스. 세트를 리스트로 바꿔서 인덱싱을 할 수 있다.
In [39]:
set_a = set([1, 1, 2, 2, 3, 3]) # 리스트 내부의 중복을 제거
set_b = list(set_a) # 리스트로 바꿔 인덱싱을 할 수 있다.
set_b
Out[39]:
[1, 2, 3]
- 세트의 튜플 인덱스. 세트를 튜플로 바꿔서 인덱싱을 할 수 있다.
In [40]:
set_a = set((1, 1, 2, 2, 3, 3)) # 튜플 내부의 중복을 제거한다.
set_b = list(set_a) # 리스트로 바꿔 인덱싱을 할 수 있다.
set_b
Out[40]:
[1, 2, 3]
- 세트의 멤버십 테스트
In [41]:
set_a = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
5 in set_a
10 not in set_a
Out[41]:
True
- 세트를 통한 리스트, 튜플 중복 제거
In [42]:
set_a = [1,1,2,3,3,2] # 내부에 중복
set(set_a) # 내장 함수 set()을 이용하여 중복을 제거
Out[42]:
{1, 2, 3}
In [43]:
set_b=(1,2,3,2,3)
set(set_b) # 튜플의 중복을 제거
Out[43]:
{1, 2, 3}
In [ ]: