Python 언어가 다른 개발언어와 비교할때, 가장 개성(?)있는 장점이 집합(set)객체의 제공이라고 생각합니다.
데이타의 집합을 직관적으로 합집합, 차집합, 교집합으로 처리할때 마치 SQL 언어에서 사용할때 보다 더욱 편리하게 느껴집니다. 개인적으로, 이 특성으로 인해 Python이 데이타 처리에 큰 강점을 가지게 된것 같습니다.
(또한, 이전에는 Database에 데이타를 넣고, 프로시져를 통해서 처리하던 부분을 지금은 다르게 처리하게 되었습니다.)
집합(set) 객체를 한마리도 정리하면 '중복이 허용되지 않는 mutable type의 객체라고 정의 합니다.
백문이 불여 일타록 하였으니 정리된 코드로 확인해보도록 하겠습니다.
#########################################
# [집한(set) 실습]
# 1) 정의: 중복이 허용되지 않는 mutable data object이다.
# 2) 접근: NOT Sequence type
# 3) 집합 기능: 합집합, 교집한, 차집합
# 4) 추가적인 함수: 넣고, 빼기, 업데이트하기
#####
# 1) 정의
aSet1 = set()
print(aSet1)
print(type(aSet1))
aSet2 = set((1,2,3,4,5)) # 튜플(tuple) -> 집합(set)
print(aSet2)
aSet3 = set(['a', 'b', 'c', 'd', 'e']) # 리스트(list) -> 집합(set)
print(aSet3)
aSet4 = set('Hello world') # 문자열(string) -> 집합(set)
print(aSet4) # 데이타 중복 제거
[결과]
set()
<class 'set'>
{1, 2, 3, 4, 5}
{'b', 'a', 'd', 'c', 'e'}
{'l', 'w', 'd', ' ', 'r', 'H', 'o', 'e'}
# 2) 접근: Sequence type 아니기 때문애 indexing 접근불가
# indexing을 하기 위해서는 Sequence type으로 전환(convert) 필요
aList2 = list(aSet2) # tuple -> set -> list
print(aList2)
print(aList2[2])
aTuple3 = tuple(aSet3) # list -> set -> tuple
print(aTuple3)
print(aTuple3[0])
aStr3 = str(aSet4) # string -> set -> string
print(aStr3)
print(aStr3[1])
[결과]
[1, 2, 3, 4, 5]
3
('b', 'a', 'd', 'c', 'e')
b
{'l', 'w', 'd', ' ', 'r', 'H', 'o', 'e'}
'
# 3) 집합 기능: 합집합, 교집한, 차집합
bSet = set([1,2,3,4,5,6,7]) # list -> set
cSet = set((4,5,6,7,8,9)) # tuple -> set
print(bSet)
print(cSet)
# 차집합 : '-', difference()
dSetDiff1 = bSet - cSet
print(dSetDiff1)
dSetDiff2 = bSet.difference(cSet)
print(dSetDiff2)
# 교집합 : '&', intersection()
dSetInter1 = bSet & cSet
print(dSetInter1)
dSetInter2 = bSet.intersection(cSet)
print(dSetInter2)
# 합집합: '|', union()
dSetUnion1 = bSet | cSet
print(dSetUnion1)
dSetUnion2 = bSet.union(cSet)
print(dSetUnion2)
[결과]
{1, 2, 3, 4, 5, 6, 7}
{4, 5, 6, 7, 8, 9}
{1, 2, 3}
{1, 2, 3}
{4, 5, 6, 7}
{4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
# 추가적인 함수
fSet = set(['a','b','c','d'])
print(fSet)
# 추가: add()
fSet.add(1)
print(fSet)
# 업데이트: update()
fSet.add((3,4,5))
print(fSet)
# 삭제: remove()
fSet.remove(1)
print(fSet)
[결과]
{'c', 'b', 'a', 'd'}
{1, 'b', 'a', 'd', 'c'}
{1, 'b', 'a', 'd', (3, 4, 5), 'c'}
{'b', 'a', 'd', (3, 4, 5), 'c'}