集合Set相似字典的特色,能夠用{}花括號來定義;其中的元素是沒有序列,也就是非序列類型的數據;並且集合中的元素不可重複,這就相似於dict鍵。python
>>> s1 = set("qiswri") #有兩個i >>> s1 set(['q', 'i', 's', 'r', 'w']) #只有一個i >>> >>> s2 = set([123,"google","facebook","book","facebook"]); >>> s2 set(['facebook', 123, 'google', 'book']) #只有一個facebook
說明集合中的元素是不能重複的,在建立集合的時候,若是發現了重複的元素,就會自定過濾重複的元素。而且集合中的元素也是隨機排序的。shell
除了用set()來建立集合,還能夠使用{}的方式,可是這種方式不提倡使用,由於在某些狀況下,Python搞不清楚是字典仍是集合。函數
unhashtable(不可哈希的)表示可變數據,如列表和字典都能原地修改,就是unhastable的;
hastable(可哈希)表示不可變數據,如字符串不能修改。google
>>> s1 set(['q', 'i', 's', 'r', 'w']) >>> s1[1] = "w" #集合不是序列類型,不能用索引方式對其進行修改 Traceback (most recent call last): File "<pyshell#9>", line 1, in <module> s1[1] = "w" TypeError: 'set' object does not support item assignment
list()和set()實現集合和列表兩種對象之間的轉化。code
>>> s2 set(['facebook', 123, 'google', 'book']) >>> type(s2) <type 'set'> >>> lst = list(s2) >>> lst ['facebook', 123, 'google', 'book'] >>> type(lst) <type 'list'> >>> s3 = set(lst) >>> s3 set(['google', 123, 'facebook', 'book'])
dir(set):列出集合的函數對象
help(set.add)排序
>>> s1 = set(["a","b","c"]) >>> s1 set(['a', 'c', 'b']) >>> s1.add("abc") #向集合中添加元素 >>> s1 set(['a', 'c', 'b', 'abc']) >>> s1.add([1,2,3]) #不能添加列表,由於列表的數據是可變的 Traceback (most recent call last): File "<pyshell#31>", line 1, in <module> s1.add([1,2,3]) TypeError: unhashable type: 'list' >>> >>> s1 set(['a', 'c', 'b', 'abc']) >>> s2 = set(["e","f","g"]) >>> s1.update(s2) #集合s2添加到s1中 >>> s1 set(['a', 'c', 'b', 'e', 'abc', 'g', 'f']) >>> s2 set(['e', 'g', 'f'])
>>> s1 set(['a', 'c', 'b', 'e', 'abc', 'g', 'f']) >>> s1.pop() #隨機刪除一個元素,並返回這個元素 'a' >>> s1.pop() 'c' >>> s1.pop("b") #不能指定參數 Traceback (most recent call last): File "<pyshell#43>", line 1, in <module> s1.pop("b") TypeError: pop() takes no arguments (1 given) >>> >>> s1.remove("b") #刪除集合中指定的元素 >>> s1 set(['e', 'abc', 'g', 'f']) >>> s1.remove() #remove必須指定參數 Traceback (most recent call last): File "<pyshell#47>", line 1, in <module> s1.remove() TypeError: remove() takes exactly one argument (0 given) >>> s1.discard("g") #存在則刪除集合中的元素 >>> s1 set(['e', 'abc', 'f']) >>> s1.discard("i") #不存在則不作處理,不拋出異常 >>> >>> s1.clear() #清空集合 >>> s1 set([])
>>> f1 = frozenset("qwert") >>> f1 frozenset(['q', 'r', 'e', 't', 'w']) >>> f1.add("q") #不能修改集合 Traceback (most recent call last): File "<pyshell#62>", line 1, in <module> f1.add("q") AttributeError: 'frozenset' object has no attribute 'add' >>> f1.remove("r") Traceback (most recent call last): File "<pyshell#63>", line 1, in <module> f1.remove("r") AttributeError: 'frozenset' object has no attribute 'remove' >>> f1.pop() Traceback (most recent call last): File "<pyshell#64>", line 1, in <module> f1.pop() AttributeError: 'frozenset' object has no attribute 'pop'
>>> aset=set(["q","w","e","r","t"]) >>> aset set(['q', 'r', 'e', 't', 'w']) >>> "q" in aset True >>> "a" in aset False
>>> a set(['q', 'r', 'e', 't', 'w']) >>> b = set(["a","b","c"]) >>> a == b False >>> a != b True
>>> c = set(["q","r"]) >>> a set(['q', 'r', 'e', 't', 'w']) >>> >>> c.issubset(a) #判斷c是不是a的子集 True >>> a.issuperset(c) #判斷a是不是c的超集 True
>>> a set(['q', 'r', 'e', 't', 'w']) >>> b set(['a', 'c', 'b']) >>> a | b set(['a', 'c', 'b', 'e', 'q', 'r', 't', 'w']) #ab的並集 >>> a.union(b) set(['a', 'c', 'b', 'e', 'q', 'r', 't', 'w']) #ab的並集
>>> a set(['q', 'r', 'e', 't', 'w']) >>> b set(['a', 'q', 'c', 'b']) >>> a & b #ab的交集 set(['q']) >>> a.intersection(b) set(['q'])
A相對B不一樣的部分元素集合索引
>>> a set(['q', 'r', 'e', 't', 'w']) >>> b set(['a', 'q', 'c', 'b']) >>> a - b set(['r', 'e', 't', 'w']) >>> a.difference(b) set(['r', 'e', 't', 'w'])
AB中不一樣元素的集合rem
>>> a set(['q', 'r', 'e', 't', 'w']) >>> b set(['a', 'q', 'c', 'b']) >>> a.symmetric_difference(b) set(['a', 'c', 'b', 'e', 'r', 't', 'w'])