-
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]
반응형