[python] 자료형 – 4. 집합

이번 글에서는 집합(Set) 자료형에 대해 알아보겠습니다.
집합 자료형은 수학의 집합과 같은 성질을 가지며 set 키워드를 사용하여 만듭니다.

아래 코드는 집합을 생성하는 코드입니다.

set_a = set([1,2,3,4]) # 리스트
set_b = set(("a", "b", "c")) # 튜플
set_c = set({0:"zero", 1:"one", 2:"two"}.keys()) # 딕셔너리 - keys
set_d = set({0:"zero", 1:"one", 2:"two"}.values()) # 딕셔너리 - values

print(set_a)
print(set_b)
print(set_c)
print(set_d)

집합은 중복을 허용하지 않으며, 데이터를 구성하는데 순서가 없습니다.

set_a = set([1, 1, 2, 3, 3, 4])
set_b = set("apple")

print(set_a)
print(set_b)

그래서 데이터에 접근하기 위해서는 아래와 같이 리스트 혹은 튜플로 저장한 뒤 접근 해야합니다.

set_a = set([1, 1, 2, 3, 3, 4])
set_b = set("apple")

list_a = list(set_a)
tuple_a = tuple(set_b)

print(list_a)
print(tuple_a)

집합 자료형에 데이터를 추가하려면 add 함수를 사용합니다. 이미 존재하는 값은 중복이 허용되지 않습니다.

set_a = set([1, 1, 2, 3, 3, 4])
print(set_a)

set_a.add(1) # 중복
print(set_a) # 동일하게 출력

set_a.add(5)
print(set_a)

한번에 여러개의 데이터를 추가 할 땐 update 함수를 사용합니다. 역시나 중복이 허용되지 않습니다.

set_a = set([1, 1, 2, 3, 3, 4])
print(set_a)

set_a.update([1,3,5,5,7])
print(set_a)

데이터를 삭제할 땐 remove 함수를 사용합니다.

set_a = set([1, 1, 2, 3, 3, 4])
print(set_a)

set_a.remove(1)
print(set_a)

집합 자료형은 수학의 집합처럼 집합 자료형끼리 교집합, 합집합, 차집합 연산을 할 수 있습니다.
아래는 2, 5, 9호선 라인의 일부 역을 집합으로 구성하였으며, 각 역끼리의 교집합을 출력한 코드입니다.
intersection 함수를 사용해도 같은 결과가 나옵니다.

set_line2 = set(["당산", "영등포구청", "문래"])
set_line5 = set(["영등포구청", "영등포시장", "신길", "여의도"])
set_line9 = set(["당산", "국회의사당", "여의도"])

# 교집합
print(set_line2 & set_line5) # set_line2.intersection(set_line5)
print(set_line5 & set_line9) # set_line5.intersection(set_line9)
print(set_line9 & set_line2) # set_line9.intersection(set_line2)

합집합 코드는 아래와 같습니다.
union 함수를 사용해도 같은 결과가 나옵니다.

set_line2 = set(["당산", "영등포구청", "문래"])
set_line5 = set(["영등포구청", "영등포시장", "신길", "여의도"])
set_line9 = set(["당산", "국회의사당", "여의도"])

# 합집합
print(set_line2 | set_line5) # set_line2.union(set_line5) 
print(set_line5 | set_line9) # set_line5.union(set_line9)
print(set_line9 | set_line2) # set_line9.union(set_line2)

차집합은 아래와 같습니다.
difference 함수를 사용해도 같은 결과가 나옵니다.

set_line2 = set(["당산", "영등포구청", "문래"])
set_line5 = set(["영등포구청", "영등포시장", "신길", "여의도"])
set_line9 = set(["당산", "국회의사당", "여의도"])

# 차집합
print(set_line2 - set_line5) # set_line2.difference(set_line5)
print(set_line5 - set_line9) # set_line5.difference(set_line9)
print(set_line9 - set_line2) # set_line9.difference(set_line2)

이상으로 집합 자료형에 대해 알아봤습니다.