ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 18. 집합(set ADT), 파이썬
    Python/파이썬 자료구조 알고리듬 2019. 6. 12. 08:00
    반응형

    집합(set)은 파이썬 2.3부터 포함된 자료형입니다. 

    이걸 또 한 번 만들어 보겠습니다. 

    삽질 맞습니다. ㅠ,.ㅠ 

     

    집합의 특징은 다음과 같습니다. 

     

    집합의 멤버는 순서가 없으며 유일합니다. 

    멤버가 하나도 없는 집합을 공집합(empty set)이라 합니다. 

    집합에 포함될 수 있는 모든 멤버를 포함하는 집합을 전체집합(universe)이라 합니다. 

    두 집합의 멤버가 정확하게 같아야 같은 집합입니다. 

    한 집합의 모든 멤버가 다른 집합에 포함되어 있을 때 이 집합을 다른 집합의 부분 집합(subset)이라 합니다. 

     

    집합의 동작은 다음과 같습니다. 

     

    합집합

    두 집합을 합쳐 새로운 집합을 만듭니다. 

    교집합

    두 집합에 모두 존재하는 멤버로 새로운 집합을 만듭니다. 

    차집합

    한집합의 멤버 중 다른 집합에 존재하지 않는 멤버로 새로운 집합을 만듭니다. 

     

    class Set:
        def __init__(self):
            self.data = []
    
        def add(self, member):
            if member not in self.data:
                self.data.append(member)
                return True
            return False
    
        def remove(self, member):
            if member in self.data:
                self.data.remove(member)
                return True
            return False
    
        def union(self, set):
            temp_set = Set()
            temp_set.data = self.data[:]
            for i in set.data:
                if i not in temp_set.data:
                    temp_set.data.append(i)
            return temp_set
    
        def intersect(self, set):
            temp_set = Set()
            for i in set.data:
                if i in self.data:
                    temp_set.data.append(i)
            return temp_set
    
        def is_subset_of(self, set):
            """ 인자로 제공된 집합의 부분집합인지 확인"""
            if len(set.data) < len(self.data):
                return False
            for i in self.data:
                if i not in set.data:
                    return False
            return True
    
        def different(self, set):
            temp_set = Set()
            temp_set.data = self.data[:]
            for i in set.data:
                if i in temp_set.data:
                    temp_set.data.remove(i)
            return temp_set
    
        def show(self):
            print(self.data)

     

    temp_set.data = self.data
    리스트에서 '='은 참조입니다. 
    temp_set.data = self.data[:]
    얕은 복사를 하기 위해 '[:]'를 추가했습니다. 

     

    boo = Set()
    boo.add(1)
    boo.add(3)
    
    foo = Set()
    foo.add(1)
    foo.add(2)
    
    boo.show()
    foo.show()
    
    u = foo.union(boo)
    u.show()
    
    print(boo.is_subset_of(u))
    print(boo.is_subset_of(foo))
    
    d = u.different(foo)
    d.show()

     

    [1, 3]
    [1, 2]
    [1, 2, 3]
    True
    False
    [3]
    반응형
Designed by Tistory.