14. 집합 세트

Set (집합) 은 흔히 볼 수 있 는 중복 되 지 않 는 요 소 를 포함 하 는 데이터 구조 로 요소 가 집합 안에 존재 하 는 지 판단 하거나 중복 여 부 를 판단 하 는 데 자주 사용 된다.
1. 집합 조작
    Set 는 Dict 보다 더 풍부 한 조작 을 하 는데 집합 에서 가장 자주 사용 하 는 조작 은 무 게 를 제거 하고 요소 가 존재 하 는 지 판단 하 는 것 이다.
    A, B 두 개의 집합 이 있다 고 가정 하면 다음 과 같은 조작 이 있 을 수 있다.
    교 집합: A & B
    모음 집: A  |  B
    차 집합: A  -  B
    대칭 차: A ^ B   즉: (A | B) - (A & B)
2.frozenset
   이것 도 일종 의 집합 이다. 그의 내용 은 변동 할 수 없다. 일반적으로 흔히 볼 수 있 는 용법 은 교체 가능 한 대상 으로 그 를 초기 화 한 다음 에 중 등 조작 만 하 는 것 이다.
    처음에 요소 의 수량 이 고정 되면 보통 forzenset 를 사용 하지만 가 변 적 인 대상 이 고 요 소 를 계속 추가 하면 python 에 내 장 된 set 를 사용 합 니 다. 
3. set 의 추상 적 인 데이터 구 조 를 실현 한다.
"""                HashTable """
#-*- coding:utf-8 -*-
class SetADT(HashTable):
    """ 
         HashTable 
    """
    def add(self, key):
          """
                add   ,
               value     True   
                    ,
             hash  (key,value)   ,
             value  True   。
        """
        return super(SetADT, self).add(key, True)


    def __and__(self, other_set):	              #  
        new_set = SetADT()		      #        
        for element_a in self:		      #         ,   element_a
            if element_a in other_set:	      #  element_a           
                new_set.add(element_a)	      # element_a        
        return new_set			      #         


    def __sub__(self, other_set):	      #  
        new_set = SetADT()		
	    for element_a in self:
            if element_a not in other_set:
                new_set.add(element_a)
        return new_set
        

    def __or__(self, other_set):	      #  
         """
                  Hash   ,
                      ,
           Hash           ,
                         key 。
        """
        new_set = SetADT()
        for element_a in self:
            new_set.add(element_a)
        for element_b in other_set:
            new_set.add(element_b)
        return new_set



#    
def test_set_adt():
    sa = SetADT()
    sa.add(1)
    sa.add(2)
    sa.add(3)
    assert 1 in sa

    sb = SetADT()
    sb.add(3)
    sb.add(4)
    sb.add(5)
    assert sorted(list(sa & sb)) == [3]
    assert sorted(list(sa | sb)) == [1,2,3,4,5] 
    assert sorted(list(sa - sb)) == [1,2]

___________________분할 선
(미 완성 부분)
a. 집합 하여 하나의 요소 가 존재 하 는 지 여 부 를 판단 하 는 시간 복잡 도 는 O (1) 이다.    
    참고 자료:https://blog.csdn.net/baoli1008/article/details/48059623
b. SetADT 를 바탕 으로 reove 와 pop 작업 을 실현 합 니 다.
    pass
c. 대칭 차 (A ^ B) 의 조작 을 실현 한다.
    pass
d. 문서 조회 도구 로 python 의 set 에 관 한 문 서 를 봅 니 다.

좋은 웹페이지 즐겨찾기