Set

중복을 허용하지 않고 순서가 없는 자료형

앞서 리스트를 공부하며 0번째 1번째 이런 이야기를 자주 들었고 생각하셨을 것입니다. Set은 데이터 추가시 위치 값을 갖고있지 않기 때문에 0번째 1번째 값을 가져오지 못합니다. 중복을 허용하지 않는 다는 장점으로 집합연산에 가장 적합하게 사용할 수 있고, 이외 다양하게 활용할 수 있습니다.

만들기

Set은 set() 함수나 중괄호({ })를 사용해서 만들수 있습니다.

set1 = set("Hello")
print(set1)
set2 = set([1,2,3,1])
print(set2)
set3 = (1,2,3,"Hello", 1)
print(set3)

사용하기

읽기

Set은 순서가 없기 때문에 리스트에서 사용하던 위치 (예 list[1]) 를 사용하지 못합니다. Set의 내용은 pop을 이용해 하나식 꺼내볼 수 있습니다.

set1 = set("Hello Python");
getFirst = set1.pop()
print(getFirst)
print(set1)

02 pop은 값을 하나 가져오고 Set에서 해당 값은 삭제합니다. 04 set1에 들어있던 값이 하나 없어짐을 확인할 수 있습니다.

Set을 List로 변경 후 가져오는 방법

set1 = set("Hello Python");
changeList = list(set1)
print(changeList[1])

02 set1을 List로 변경 후 changeList에 넣어둡니다. 03 List로 변경되었기 때문에 앞서 배운 List의 기능을 사용할 수 있습니다.

추가

add(값) 함수를 이용해 값을 하나식 추가할 수 있습니다.

set1 = set([1,2,3,4,5]);
print(set1)
set1.add(10)
set1.add(11)
print(set1)

update(값들)을 이용해 여러개를 한번에 추가할 수 있습니다.

set1 = set([1,2,3,4,5]);
print(set1)
set1.update("Hello")
print(set1)
set1 = set([1,2,3,4,5]);
print(set1)
set1.update([1,10,11,11,14])
print(set1)

삭제

remove(값)을 이용해 삭제할 수 있습니다.

set1 = set([1,2,3,4,5]);
set1.remove(1)
print(set1)

만약 없는 값을 삭제할 때는 에러가 발생하게됩니다.

set1 = set([1,2,3,4,5]);
set1.remove(10)
print(set1)

에러가 발생하지 않고 삭제하기 위해서는 discard 함수를 이용합니다.

set1 = set([1,2,3,4,5]);
set1.discard(10)
print(set1)

집합연산

집합 요소의 기본은 중복이 없다는 것과 연속성이 없다입니다. 연속성이 없다는 것은 {1, 4, 6}, {1, 6, 4} 는 같은 집합입니다. 이에 가장 부합되는 자료형은 Set입니다.

차집합

setA = set([2,4,6,8]);
setB = set([3,6,9,12,15]);

print(setA-setB)
print setA.difference(setB)

setA의 차집합은 2, 4, 8 입니다. 04 setA - setB로 setA에서 setB의 값을 제거 하면 교집합값은 제거 됩니다. 05 difference 함수를 사용.

교집합

setA = set([2,4,6,8]);
setB = set([3,6,9,12,15]);

print(setA&setB)
print(setA.intersection(setB))

교집합의 값은 6입니다.

합집합

setA = set([2,4,6,8]);
setB = set([3,6,9,12,15]);

print(setA|setB)
print(setA.union(setB))

합집합은 2, 3, 4, 6, 8, 9, 12, 15 입니다.

대칭차

대칭차는 교집합 부분을 제외한 나머지 원소의 집합입니다.

setA = set([2,4,6,8]);
setB = set([3,6,9,12,15]);

print(setA^setB)

6을 제외한 값들이 출력됩니다.

문제

문제1 롯또 번호 생성기를 만들어 주세요.

문제2 식당을 개업하려고 시장 조사 중인 친구들이있다. 남부 시장이 새롭게 만들어져서 남부 시장에 자리 잡기로했다. 주변에는 서부시장, 중앙시장, 남부 시장이 위치하고 있다. 시장조사를 위해 잘되는 집을 파악해보니 서부 시장에는 순대국 3, 피자 2, 떡볶이 튀김 2, 곱창 3 중앙 시장에는 백반 1, 순대국 2, 대구탕 1, 떡볶이 튀김 2, 기사식당 1, 곱창2 남부 시장에는 순대국 1, 피자 1, 해물탕 1, 떡볶이 튀김 1, 곱창2, 어떤 가계를 오픈하겠는가? 데이터를 보여주며 설명을 해봅시다.

Last updated