国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python基礎教程:set(集合)

dackel / 1192人閱讀

摘要:空集合的長度是和類似于對列表的操作。把多個對象添加到集合中。和這兩個都是從集合中刪除一個元素。求兩個或多個集合的交集,即把這些集合中共同含有的元素放在一起組合成新的集合并返回。相當于集合的減法。集合不能作為字典的,但是卻可以。

Python集合(set),是一個很有意思的數據結構。從形式上看,它像字典有key但沒有value,它的寫法是這樣的s = {"a", "b", "c"},是不是像一個沒有value的字典?另一方面,它又像是一個用花括號替換了方括號的列表,但它不能像列表那樣用索引訪問元素。

其實,Python集合在內部實現上就是一個沒有value的字典,所以它跟字典很像。既然和字典很像,那么還要集合干什么?集合主要用來干什么呢?

集合主要用于測試一個對象是不是在一堆對象集里面,也就是in運算。這個功能其實列表也可以,比如1 in [2,3,4,5],但是用列表的速度遠遠低于集合,尤其是在這一堆對象的數量非常大時。

列表因為是順序存儲的,它的查找時間復雜度是O(n),而集合是用hash table實現的,其時間復雜度是O(1)

Python集合(set)的創建

集合可以通過set()來創建一個空集合,也可以把一個列表轉換為集合。類似字典那樣在花括號內可以放用逗號,隔開的多個對象:

In [1]: s = set()

In [2]: type(s)
Out[2]: set

In [3]: set([1,2,3,4,5])
Out[3]: {1, 2, 3, 4, 5}

In [4]: set([1,2,3,3,5])
Out[4]: {1, 2, 3, 5}

In [5]: s = {"a", "d", "e", "c", "b"}

In [6]: s2 = {1, "a", True} 

In [7]: s = {"a", "a", "a"}

In [8]: s
Out[8]: {"a"}  # 字典里面的元素不能重復

跟字典的鍵不能是可變對象一樣,集合里面也不能是列表、集合、字典:

In [9]: s = {"a", [1,2]}
------------------------
TypeError        Traceback (most recent call last)
 in 
----> 1 s = {"a", [1,2]}

TypeError: unhashable type: "list"

In [10]: s = {"a", {"a":1}}
---------------------------
TypeError           Traceback (most recent call last)
 in 
----> 1 s = {"a", {"a":1}}

TypeError: unhashable type: "dict"
Python集合(set)的訪問

集合不能像列表那樣通過索引訪問內部某一個元素,只能通過遍歷訪問全部元素,或通過變量名訪問整個集合:

In [13]: s = {"a", "b", "c"}

In [14]: s
Out[14]: {"a", "b", "c"}

In [15]: for x in s: 
    ...:     print(x) 
    ...:
a
c
b
集合相關的內置函數

Python內置了一些函數可以用于操作集合,它們是:

len()
返回集合的長度,即集合包含的元素的個數。空集合的長度是0

In [41]: len({"a", "b"})
Out[41]: 2

In [42]: len(set())
Out[42]: 0

any()和all()
類似于對列表、tuple的操作。
any(): 只要集合有一個元素為True則返回True;
all(): 只有集合的所有元素都為True才返回True;

In [45]: any({"", 0, False})
Out[45]: False

In [46]: all({"", 0, False})
Out[46]: False

In [47]: all({"a", 0:, False})
Out[47]: False

In [48]: any({"a", 0:, False})
Out[48]: True

In [49]: any(set())
Out[49]: False

In [50]: all(set())
Out[50]: True

跟空字典一樣,它卻認為是所有元素都為True,all(set())返回True。

sorted()
跟操作列表、tuple的效果一樣,它把集合的所有元素進行排序

In [51]: sorted({"a", "c", "b"})
Out[51]: ["a", "b", "c"]
in 運算符

跟列表,元組一樣,in用來檢驗一個對象是不是在集合中:

In [56]: "a" in {"a", "c", "b"}
Out[56]: True

In [57]: "3" in {"a", "c", "b"}
Out[57]: False

In [58]: "3" not in {"a", "c", "b"}
Out[58]: True

遍歷集合:

In [59]: for k in {"a", "c", "b"}: 
    ...:     print(key) 
    ...:
a
c
b
集合的內置方法:

(1)add(x)
把對象x添加到集合中。

In [25]: s = {"a", "b", "c"}

In [26]: s.add(1)

In [27]: s
Out[27]: {1, "a", "b", "c"}

(2)update()
把多個對象添加到集合中。

In [28]: s.update([1,2,3])

In [29]: s
Out[29]: {1, 2, 3, "a", "b", "c"}

In [30]: s.update(["x", "y"], {7,8,0})

In [31]: s
Out[31]: {0, 1, 2, 3, 7, 8, "a", "b", "c", "x", "y"}

(3)discard(x) 和 remove(x)
這兩個都是從集合中刪除一個元素x。不同的是,如果x不在集合中,discard()會忽略;而remove()會拋出KeyError的錯誤:

In [32]: s
Out[32]: {0, 1, 2, 3, 7, 8, "a", "b", "c", "x", "y"}

In [33]: s.discard(0)

In [34]: s.remove(1)

In [35]: s
Out[35]: {2, 3, 7, 8, "a", "b", "c", "x", "y"}

In [36]: s.discard("z")

In [37]: s.remove("z")
----------------------
KeyError              Traceback (most recent call last)
 in 
----> 1 s.remove("z")

KeyError: "z"

(4)pop()
類似字典的pop()和列表的pop(),都是從其中刪除一個元素并返回該元素。因為集合沒有key和索引的概念,所以集合的pop()不帶參數。

(5)clear()
清空一個集合

In [40]: s
Out[40]: {2, 3, 7, 8, "a", "b", "c", "x", "y"}

In [41]: s.clear()

In [42]: s
Out[42]: set()

(6)copy()
跟字典的copy()一樣,返回一個集合的深拷貝。

In [44]: s = {"a", "b", "c"}

In [45]: s2 = s.copy()

In [46]: s2
Out[46]: {"a", "b", "c"}

In [47]: s.add(1)

In [48]: s
Out[48]: {1, "a", "b", "c"}

In [49]: s2
Out[49]: {"a", "b", "c"}

(7)union()
求兩個或多個集合的并集,即把這些集合的所有元素放在一起組成新的集合并返回。它不改變原來的集合。

In [51]: s1, s2, s3 = {1,2,3}, {4,5,6}, {6,7,8}

In [52]: s1.union(s2)
Out[52]: {1, 2, 3, 4, 5, 6}

In [53]: s1
Out[53]: {1, 2, 3}

In [54]: s1.union(s2, s3)
Out[54]: {1, 2, 3, 4, 5, 6, 7, 8}

(8)intersection()
求兩個或多個集合的交集,即把這些集合中共同含有的元素放在一起組合成新的集合并返回。同樣它也不改變原來的集合。

In [55]: s1.intersection(s2)
Out[55]: set()

In [56]: s2.intersection(s3)
Out[56]: {6}

In [57]: s1.intersection(s2, s3)
Out[57]: set()

(10)difference()
求一個集合S與另一個或多個集合的差集,即把只包含在集合S卻不在做比較的集合中的元素組成新的集合并返回,同樣它也不改變原來的集合。相當于集合的減法。

In [58]: s1.difference(s2)
Out[58]: {1, 2, 3} # 返回s1包含卻不在s2中的元素組成的集合: s1 - s2

In [59]: s2.difference(s1)
Out[59]: {4, 5, 6} # s2包含,s1不包含: s2 - s1

In [60]: s2.difference(s3)
Out[60]: {4, 5}  # s2包含,s3不包含: s2 - s3

In [61]: s2.difference(s3, s1)
Out[61]: {4, 5} # s2包含,s3,s1都不包含: s2 - s3 - s1

(11)symmetric_difference()
求兩個集合中除去交集之外的元素集合,即把不同時包含在兩個集合中的元素放在一起組成新的集合并返回。

In [63]: s1, s2, s3
Out[63]: ({1, 2, 3}, {4, 5, 6}, {6, 7, 8})

In [64]: s1.symmetric_difference(s2)
Out[64]: {1, 2, 3, 4, 5, 6}

In [65]: s2.symmetric_difference(s3)
Out[65]: {4, 5, 7, 8}

(12) intersection_update()
同intersection()一樣求得新集合,但是本方法改變調用它的對象。

In [74]: s1, s2, s3 = {1,2,3}, {4,5,6}, {6,7,8}

In [75]: s1.intersection(s2)
Out[75]: set()

In [76]: s1
Out[76]: {1, 2, 3}

In [77]: s1.intersection_update(s2)

In [78]: s1
Out[78]: set()

(13)difference_update()
同difference()一樣求得新集合,并用新集合改變調用該方法的集合。

In [79]: s1, s2, s3 = {1,2,3}, {4,5,6}, {6,7,8}

In [80]: s1.difference_update(s2)

In [81]: s1
Out[81]: {1, 2, 3}

(14)symmetric_difference_update()
通symmetric_difference()一樣求得新集合,并用新集合改變調用該方法的集合。

In [83]: s1, s2 = {1,2,3}, {4,5,6}

In [84]: s1.symmetric_difference_update(s2)

In [85]: s1
Out[85]: {1, 2, 3, 4, 5, 6}

(15)isdisjoint()
如果兩個集合沒有交集則返回True。

In [87]: s1, s2 = {1,2,3}, {4,5,6}

In [88]: s1.isdisjoint(s2)
Out[88]: True

(16)issubset()
判斷一個集合是不是另一個集合的子集,即它的所有元素都包含在另外一個集合中。

In [89]: {1,2}.issubset({1,2,3})
Out[89]: True

In [90]: {1,2}.issubset({1,2})
Out[90]: True

In [91]: {1,2}.issubset({1,5,6})
Out[91]: False

(17)issuperset()
判斷一個集合是不是另一個集合的超集,即它包含另外一個集合的所有元素。

In [93]: {1,2}.issuperset({1,2})
Out[93]: True

In [94]: {1,2}.issuperset({1,2,3})
Out[94]: False

In [95]: {1,2}.issuperset({1})
Out[95]: True
frozenset

顧名思義,就是凍住了的集合,即不可改變的集合。集合不能作為字典的key,但是frozenset卻可以。

In [100]: fs1 = frozenset()

In [101]: fs1
Out[101]: frozenset()

In [102]: fs2 = frozenset([1,2,3])

In [103]: fs2
Out[103]: frozenset({1, 2, 3})

In [104]: {fs2:3}
Out[104]: {frozenset({1, 2, 3}): 3}
總結

集合是沒有了value的字典,但它也有自己的個性。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43774.html

相關文章

  • Python基礎到入門】Python基礎語法篇——基本數據類型【文末送書】

    摘要:布爾值布爾值和布爾代數的表示完全一致,一個布爾值只有兩種值的數據類型可以通過內置的函數查詢,例如還可以用來判斷和的區別在于不會認為子類是一種父類類型。會認為子類是一種父類類型。基本功能是進行成員關系測試和刪除重復元素。 ...

    Winer 評論0 收藏0
  • ??爆肝十二萬字《python從零到精通教程》,從零教你變大佬??(建議收藏)

    文章目錄 強烈推薦系列教程,建議學起來!! 一.pycharm下載安裝二.python下載安裝三.pycharm上配置python四.配置鏡像源讓你下載嗖嗖的快4.1pycharm內部配置 4.2手動添加鏡像源4.3永久配置鏡像源 五.插件安裝(比如漢化?)5.1自動補碼神器第一款5.2漢化pycharm5.3其它插件 六.美女背景七.自定義腳本開頭八、這個前言一定要看九、pyt...

    booster 評論0 收藏0
  • Python0基礎(上)——期末不掛科

    摘要:易于維護的成功在于它的源代碼是相當容易維護的。可移植基于其開放源代碼的特性,已經被移植也就是使其工作到許多平臺。集合集合是由一個或數個形態各異的大小整體組成的,構成集合的事物或對象稱作元素或是成員。基本功能是進行成員關系測試和刪除重復元素。 ...

    Ajian 評論0 收藏0
  • ??蘇州程序大白一文從基礎手把手教你Python數據可視化大佬??《??記得收藏??》

    ??蘇州程序大白一文從基礎手把手教你Python數據可視化大佬??《??記得收藏??》 目錄 ????開講啦!!!!????蘇州程序大白?????博主介紹前言數據關系可視化散點圖 Scatter plots折線圖強調連續性 Emphasizing continuity with line plots同時顯示多了圖表 數據種類的可視化 Plotting with categorical da...

    Drinkey 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<