본문 바로가기
프로그래밍/python

[python] set 자료형 활용하여 부분집합 구하기 / 부분집합인지 확인하는 방법

by 잇서니 2019. 9. 6.
반응형

python 부분집합 구하기

부분집합 개념을 쉽게 풀어보자

  • 어떤 덩어리(a)가 다른 덩어리(b) 안에 포함되어 있는가?
    • a={ "apple", "banana"}
    • b={"apple", "banana", "orange"}
  • 어떤 덩어리(a)와 다른 덩어리(b)의 교집합이 어떤 덩어리(a)와 같은가? (a의 사이즈가 더 작을 때)

python 부분집합인지 확인하기

어떤 덩어리(a)와 다른 덩어리ㅎ(b)의 교집합이 어떤 덩어리(a)와 같은가? 관점으로 접근해보겠습니다.

def check (a,b):

    # 교집합 개념을 사용하기 위해 리스트인  a, b를 set 자료형으로 변경한다.
    s1=set(a)
    s2=set(b)

    if s1 ==s1.intersection(s2) :
        print("a는 b의 부분집합입니다!")

    elif s2==s1.intersection(s2):
        print("b는 a의 부분집합입니다")    

python 부분집합 구하기

결국 [[조합 (combinations)]] 을 구하는 것입니다. 0개쌍, 1개쌍, 2개쌍 , .... n개쌍으로 이루어진 조합을 모두 구하면 됩니다. 0개쌍은 공집합을 의미합니다.

from itertools import combinations

a=[1,2,3]
result=[]

for i in range(0,len(a)+1):
    c=combinations(a,i)
    result.extend(c)

print(result)
#[(),(1),(2),(3),(1,2),(1,3),(2,3),(1,2,3)]
반응형

댓글