1. 程式人生 > 其它 >第八章、Python資料型別(set集合)

第八章、Python資料型別(set集合)

9、集合(set)

集合建立用花括號{ }或者set()函式。

注意:

建立一個空集合必須用set()而不是{ },因為{ }是用來建立一個空字典。

集合中的元素無序,不可重複。

不推薦使用花括號{}建立集合,因為Python難以分辨是字典還是集合

set()函式可以建立一個無序不重複的元素集,這個函式至多可以傳一個引數,否則會報錯;可以傳比如串一個字串或者一個列表,只含有一個引數

>>> a=set("A",12)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: set expected at most 1 arguments, got 2
#例項中傳了2個引數,所以會報錯
>>> a=set("Asdad")

>>> a=set(["["a","b"]","q","w","e"])
File "<stdin>", line 1
a=set(["["a","b"]","q","w","e"])
^
SyntaxError: invalid syntax
>>> a=set(['["a","b"]',"q","w","e"]) #單引號和雙引號配合使用,不能單引號巢狀單引號,或者雙引號巢狀雙引號

1)list()和set()能夠實現兩種資料型別之間的轉化。

2)基本操作

set.add(元素) 向set集合中新增元素

set1.update(set2) 將集合set2更新到集合set1中

>>> a.add("q")
>>> a
set(['A', 1, 2, 'q'])
>>> b=set()
>>> b.update(a)
>>> b
set(['A', 1, 2, 'q'])
>>> c.update(a)            
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dictionary-itemiterator' object has no attribute 'update'
# 注得先建立集合才能使用update,否則會報錯,字典也是一樣,得先創建出存在的字典

set.pop()函式,任意選一個元素刪除並將這個值返回。pop()不能有引數,否則報錯。此外,如果set是空的了,也報錯。

set.remove(obj)函式,刪除指定元素obj,該元素必須是set中的元素,否則就報錯。

set.discard(obj)函式,刪除指定元素obj,obj如果是set中的元素,就刪除,如果不是,就什麼也不做。

set.clear()函式,清空集合中的所有元素,得到空集合。

3) set()創立的集合都是可原處修改的集合,即裡面的元素可變;frozenset()創立的集合不能在原處修改,裡面的元素不可變。

>>> a=frozenset()
>>> type(a)
<type 'frozenset'>

4)判斷集合A與集合B的關係

>>> a=set(['q', 'w', 'e', 'r'])
>>> b=set(['q', 'w'])
>>> b<a     #c是a的子集
True
>>>b.issubset(a)   #或者用這種方法,判斷c是否是a的子集
True
>>> a.issuperset(c) #判斷a是否是c的超集
True
>>> a | b                       #並集,可以有兩種方式,結果一樣
set(['q', 'w', 'e', 'r'])
>>> a.union(b)
set(['q', 'w', 'e', 'r'])
>>> a & b       #交集,兩種方式,等價
set(['q', 'w'])
>>> a.intersection(b)
set(['q', 'w'])
>>> a - b                #A相對B的差(補)
set('e', 'r'])
>>> a.difference(b)
set(['e', 'r'])
>>> c=set(['q', 'w','s'])    #A、B的對稱差集
>>> a.symmetric_difference(c)
set(['s', 'r', 'e'])