python內置數據結構之set

內置數據結構set

    定義:
        可變的、無序的、不重複的元素的集合.
        常用於: 去重
    set是可迭代對象
    set中的元素必須是可hash的
    set中的值不能通過索引訪問
  • set定義,初始化

        set() -> new empty set object
        set(iterable) -> new set object
    
        注意:
            定義set時,可用{}來表示,但不能爲空
        如下:
            >>> type({})      # '{}'表示定義的是dict
            <class 'dict'>
            >>> type({1})     
            <class 'set'>


  • set方法


    • 增 

          add(elem)
          添加一個元素至set
      
          update(*others)
          將可迭代對象添加至set



    •     remove(elem)
          刪除set中指定的元素,如果找不到拋出KeyError
      
          discard(elem) 
          刪除set中指定的元素,如果找不到,就什麼都不做
      
          pop() --> elem
          隨機彈出set中某元素,並輸出至標準輸出
          如果找不到拋出KeyError
      
          clear()
          清空set內所有元素
      
          問: 爲什麼拋出的異常是KeyError,而不是ValueError?
          說明set是通過Key來查詢值是否存在,而不是通過value的對比.



    •     非線性結構,無法索引



    •     修改,還不如直接刪除,再增一個新元素


  • set成員運算符比較

        比較set和list查詢效率:
        lst1 = list(range(100))
        lst2 = list(range(1000000))
        -1 in lst1、-1 in lst2     # 使用此語句測試效率
        s1 = set(range(100))
        s2 = set(range(1000000))
        -1 in s1、-1 in s2         # 使用此語句測試效率
    
        測試結果:
            list相差數量級的倍數
            set相差無幾


  • set和線性結構

        線性結構在查詢效率方面,查詢的數據的量級越大,所消耗的時間則會越多.
        set、dict等,內部使用hash作爲key,在查詢上時間複雜度爲O(1).即查詢時間,跟數據量級無關.


  • 可hash對象

        整型
        字符型
        tuple
        None
        bytes(保存的是對應的字符編碼)   

        使用內置的hash()函數來判斷此對象是否是可hash的.

        例:
            >>> hash([1])          # 列表不可hash
            Traceback (most recent call last):
              File "<stdin>", line 1, in <module>
            TypeError: unhashable type: 'list'


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章