Python學習---Python下[set集合]的學習

來源:互聯網
上載者:User

標籤:方式   abs   update   auto   子集和   cte   add   mos   應用   

Set集合[可變]是一個無序的,不重複的資料群組合,它的主要作用如下:

            1. 去重,把一個列表變成集合,就自動去重了

            2. 關係測試,測試兩組資料之前的交集、差集、並集等關係

集合(set):把不同的元素組成一起形成集合,是python基本的資料類型。

集合分類:可變集合、不可變集合

    可變集合(set):可添加和刪除元素,非可雜湊的[但是要求自己的元素是可Hash的],不能用作字典的鍵,也不能做其他集合的元素

    不可變集合(frozenset):與上面恰恰相反

建立結合:

      利用set()/ frozenset()建立,且元素必須是不可變的,利用大括弧{}輸出封裝

# 錯誤的建立s = set(‘a‘, 1, ‘b‘)print(s)          # TypeError: set expected at most 1 arguments, got 3 li = [1, 2, ‘a‘, ‘b‘]s = set(li)       # 列表變為集合print(s)  # {1, 2, ‘a‘, ‘b‘}li2 = [1, 2, 1, ‘a‘, ‘a‘]s = set(li2)print(s)          # 去重後: {1, 2, ‘a‘}li = [[1, 2,], ‘a‘, ‘b‘]s = set(li)   # 報錯,TypeError: unhashable type: ‘list‘# sets1 = set(‘hello‘)print(s1)         # {‘h‘, ‘l‘, ‘o‘, ‘e‘}# frozensets2 = frozenset(‘hhh‘)print(s2)         # frozenset({‘h‘})
訪問集合

由於集合本身是無序的,所以不能為集合建立索引或切片操作,只能迴圈遍曆或使用in、not  in來訪問或判斷集合元素。

s1 = set(‘hello world‘)print(‘a‘ in s1)       # Trueprint(‘b‘ in s1)       # False# s1[1]  #TypeError: ‘set‘ object does not support indexing# 迴圈迭代無序輸出for i in s1:    print(i, end=‘\t‘)   # e w o r d l h# 直接輸出print(s1)    # {‘h‘, ‘w‘, ‘r‘, ‘l‘, ‘o‘, ‘d‘, ‘e‘, ‘ ‘} 輸入裡面有空格,輸出也有空格
更新集合

s.add() :元素作為一個整體添加進去
s.update(): 必須添加的是一個序列,列表[可以理解為添加,但是是一個字元一個字元序列化的添加]
s.remove():刪除掉某一個元素
s.pop():刪除任何一個元素,因為set集合是無序的,刪除的隨機性
s.clear(): 清空set裡面的值
del set(): 刪除set集合

s1 = set(‘apple‘)print("原始set集合  :", s1)s1.add(‘samsung‘)print("add後的set   : ", s1)s1.update(‘huawei‘)print("update後的set:", s1)s1.remove(‘a‘)           # 因為添加的是序列後的單個字元,所以不能直接輸入print("remove後的set:", s1)s1.pop()print("pop後的set   :", s1)s1.clear()print("clear後的set :", s1)del s1# print("del後的set   :", s1)  # 報錯 NameError: name ‘s1‘ is not defined

集合類型操作符

1   in ,not in
2   集合等價與不等價(==, !=)
3   子集、超集

4   聯合(|)操作與集合的or操作其實等價的,聯合符號有個等價的方法,union()

子集和超集: 父集必須多於子集和一個字元

                  S1是S0的父集合: s1.issuperset(s0)  ==> s1 > s0

                  S0是S1的子集合: s0.issubset(s1)    ==> s0 < s1

s1 = set(‘applesamsung‘)s0 = set(‘apple‘)print("原始set集合[s0]   :", s0)print("原始set集合[s1]   :", s1)print(‘s1是s0的父集合    :‘, s1 > s0)   # 父集必須多於子集和一個字元print(‘s1是s0的issuperset:‘, s1.issuperset(s0))   # 父集必須多於子集和一個字元print(‘s0是s1的父集合    :‘, s0 < s1)   # 父集必須多於子集和一個字元print(‘s0是s1的issubset  :‘, s0.issubset(s1))   # 父集必須多於子集和一個字元

交集: s0.intersection(s1)  ==> s0 & s1

並集: s0.union(s1)   ==> s0 | s1

差集: s0.difference(s1)   ==> s0  - s1   【以S0為基礎進行對比,in s0 not in s1】

對稱差集: s0.symmetric_difference(s1)  ==> s0 ^ s1

s0 = set([1, 2, 3, 4, 5])s1 = set([4, 5, 6, 7, 8])print("原始set:s0:", s0)print("原始set:s1:", s1)print("【交集】and  :", s0.intersection(s1))  # 取出交集print("【交集】s0&s1:", s0&s1)  # 取出交集print("【並集】     :", s0.union(s1))         # 取出並集print("【並集】s0|s1:",s0 | s1)             # 取出並集print("【S0差集】   :", s0.difference(s1))    # 以S0為主, in S0 not in S1print("【差集】s0-s1:", s0-s1)    # 以S0為主, in S0 not in S1print("【S1差集】   :", s1.difference(s0))    # 以S1為主, in S1 not in S0print("【差集】s1-s0:", s1-s0)    # 以S0為主, in S0 not in S1print("【對稱差集】      :", s1.symmetric_difference(s0))  # 除了公用的元素以外的元素print("【對稱差集】s0 ^s1:", s1 ^ s0 )  # 除了公用的元素以外的元素

set集合應用:最簡單的去重
‘‘‘最簡單的去重方式‘‘‘lis = [1,2,3,4,1,2,3,4]print list(set(lis))    #[1, 2, 3, 4]

 

Python學習---Python下[set集合]的學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.