본문 바로가기

Python/Basic

[파이썬 기초] 파이썬 셋 set 기초 완전 정복

 

안녕하세요

파이썬 셋에 대해서 설명해드리도록 하겠습니다

 

 

셋 Set

집합을 나타내기 위한 자료형 

중복을 허용하지 않는다

순서가 없다

 

 

셋 생성하기 

set 함수 혹은 {} 중괄호 안에 콤마로 구분된 하나 이상의 값

을 넣으면 생성할 수 있습니다

set() 함수를 써서 set 셋 를 생성하였습니다

*빈 셋을 생성한 것입니다

 

 

{ } 중괄호 안에 , 쉼표로 구분한 항목을 써서 set 셋 을 생성하였습니다

 

 

in으로 멤버쉽 테스트하기

일반적으로 사용되는 set의 용도이다

jjigae = {
		'된장 찌개' : { '두부', '된장', '양파', '청양고추', '다시마', '멸치'},
		'김치 찌개' : { '김치', '돼지고기', '양파', '청양고추', '간장', '다진마늘'},
		'순두부 찌개' : { '다진마늘', '고추가루', '순두부', '다시마', '멸치', '국간장', '청양고추'},
		'미역국' : { '국간장', '다진마늘', '미역', '참기름', '멸치액젓', '소고기' }

} 

위의  jjigae(찌개) 딕셔너리를 볼 수있다.

복붙 하셔서 예제를 따라해보세요

 

jjjigae 딕셔너리를 보시면 된장 찌개, 김치 찌개, 순두부 찌개, 미역국 이라는 key가 존재합니다. 

 

위의 딕셔너리를 이용해서 두부가 들어가있는 찌개를 출력하고싶다 

 

Q. 두부가 들어있는 찌개는?

for name, contents in jjigae.items():
	if '두부' in contents:
    		print(name)

for 문을 가지고 jjigae 딕셔너리의 items 중에서 '두부'와 일치하는 항목을 출력하였다.

 

 

 

Q. 다진마늘, 양파가 들어이쓴 찌개는?

for name, contents in jjigae.items():
	if '다진마늘' and '양파' in contents:
    		print(name)

and를 이용하여 다진마늘과 양파가 들어가있는 찌개를 추출하였다

 

 

Q. 다진마늘은 들어있지만 청양고추 또는 양파가 들어가있지 않은 것은? 

 *청양고추와 양파가 들어가있지 않아야한다

for name, contents in jjigae.items():
	if '다진마늘' in contents and ('청양고추' or '양파') not in contents:
    		print(name)
        

위의 몇개의 질문들을 보면 머리가 아파온다 이것들을 조금 더 쉽게 해결 하려면 

set의 집합의 성질을 이용하면 쉽게 해결 할 수 있다.

 

위의 벤다이어 그램을 확인하면서 아래의 함수들을 이해해보자

 

함수를 이용하기 전에 jjigae 딕셔너리의 항목들을 set 형태로 바꾸어 준다

 

 

교집합 & , intersection()

 

 

교집합은 a 집합과 b 집합이 공통으로 들어있는 부분을 가리킨다

 

 

김치와 된장 set의 교집합을 알아보았다

 

 

합집합 | union()

합집합은 a 집합과 b 집합을 모두 가리킨다 단 교집합 부분이 중복은 안된다

김치와 된장의 합집합을 구해보았다 중복되는 값이 없이 나온걸 확인 할 수 있다

 

 

차집합 - , difference()

a - b 라는 의미는 a의 집합 부분에서 b가 차지하는부분을 뺴라는의미입니다

김치에서 된장의 겹치는 부분을 제외한 재료들만 나왔다

 

 

 

대칭 차집합 ^ , symmetric_difference() 

*언더바를 꼭 써줘야한다

교집합을 제외한 부분의 집합이다