About Python – “집합 자료형 – Set”

About Python – “집합 자료형 – Set”

2021/12/22 1:01 AM

파이썬의 집합 자료형 (Set)

집합은 특정한 조건에 맞는 별개의 원소들의 모임을 의미합니다. 파이썬에서 집합 자료형을 사용하기 위해서는 set()를 사용하면 됩니다.

set1 = set(["사자","코끼리","기린","범고래","코뿔소"])
print(set1)
print(type(set1))

# {'기린', '코끼리', '범고래', '코뿔소', '사자'}
# <class 'set'>

집합 자료형은 튜플이나 리스트 자료형과 같이 순서가 존재하지 않습니다. 순서를 이용해서 리스트나 튜플의 경우에는 인덱싱이나 슬라이싱을 할 수 있었는데, 집합의 경우에는 인덱싱이나 슬라이싱을 할 수 없습니다.

파이썬의 집합 자료형 활용하기

이것은 드모르간의 법칙을 벤 다이어그램으로 나타낸 것입니다. 집합 A와 B의 합집합의 여집합은 A의 여집합과 B의 여집합의 교집합과 같다는 것입니다.

ALL = set([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]) # 전체 집합을 정의하였습니다.
setA = set([2,4,6,8,10,12,14,16,18,20]) #2의 배수를 원소로 가집니다.
setB = set([3,6,9,12,15,18]) #3의 배수를 원소로 가집니다.

# 1-1) A와 B의 합집합을 나타내기
setAB = setA | setB # 합집합은 "|" 기호로 나타냅니다.
print("A와 B의 합집합은, %s" % str(setAB)) # union()함수를 이용할 수도 있습니다.
print(setA.union(setB))

# 1-2) A와 B의 합집합의 여집합을 나타내기
CsetAB = ALL - setAB # 차집합은 "-" 기호로 나타냅니다.
print("A와 B의 합집합의 여집합은, %s" % str(CsetAB))
print(ALL.difference(setAB)) # diffefence()함수를 이용할 수도 있습니다.

# 2-1) A와 B의 여집합 나타내기
CsetA = ALL - setA
CsetB = ALL - setB
print("A의 여집합은, %s" % str(CsetA))
print("B의 여집합은, %s" % str(CsetB))

# 2-2) A의 여집합과 B의 여집합의 교집합 나타내기
setFinal = CsetA & CsetB # 교집합은 "&" 기호로 나타냅니다.
print("A의 여집합과 B의 여집합의 교집합은, %s" % str(setFinal))
print(CsetA.intersection(CsetB)) # intersection()함수를 이용할 수도 있습니다.

# 3) 1의 결과와 2의 결과가 같은지 확인
if CsetAB == setFinal:
    print("드모르간의 법칙이 성립합니다.")


# A와 B의 합집합은, {2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20}
# {2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20}
# A와 B의 합집합의 여집합은, {1, 5, 7, 11, 13, 17, 19}
# {1, 5, 7, 11, 13, 17, 19}
# A의 여집합은, {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}
# B의 여집합은, {1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20}
# A의 여집합과 B의 여집합의 교집합은, {1, 5, 7, 11, 13, 17, 19}
# {1, 5, 7, 11, 13, 17, 19}
# 드모르간의 법칙이 성립합니다.

위의 그림을 파이썬으로 나타내 보는 코드입니다. 교집합, 차집합, 합집합을 나타내는 방법을 기술하였습니다.

Thank you for visiting!

Thank you for visiting!

If you found this post helpful, please consider sharing and liking it. If you have any questions, feel free to leave a comment. 😎

If you’d like to contact me personally, please use the button below to send me an inquiry email. 📧