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 [ ]: