說集合以前,咱們先說一個小例子,假設某公司有五我的喜歡打籃球,五我的喜歡打遊戲,問即打遊戲有打籃球html
的人都有哪些?python
play_basketball = ['a','b','c','d','e'] play_game = ['a','b','c','f','g'] both_play=[] for name in play_basketball: if name in play_game: both_play.append(name) print(both_play) 結果: ['a', 'b', 'c']
在不瞭解集合以前咱們確定以上面的方法解決問題,可是學了集合以後,咱們就有更簡單的方法了,是什麼呢?讓咱們慢慢了解。python3.x
集合用於包含一組無序的對象。與列表和元組不一樣,集合是無序的,也沒法經過數字進行索引。此外,集合中的元素不能重複。set和dict同樣,只是沒有value,至關於dict的key集合,因爲dict的key是不重複的,且key是不可變對象所以set也有以下特性:app
首先籠統的講一下python3.x集合的內置函數有17個,分別以下:函數
序號 | 函數 | 描述 |
1 | add(self, *args, **kwargs)spa |
是把要傳入的元素作爲一個整個添加到集合中 |
2 | clear(self, *args, **kwargs)3d |
清空集合裏面的全部元素 |
3 | copy(self, *args, **kwargs)code |
複製集合裏面的全部元素 ,返回一個淺複製 |
4 | difference(self, *args, **kwargs)htm |
求兩個集合裏面的不一樣的元素 ,又稱差 |
5 | difference_update(self, *args, **kwargs)對象 |
返回刪除了 set 「集合2」中含有的元素後的 set 「集合1」 |
6 | discard(self, *args, **kwargs) |
若是在 set 「集合」中存在元素 x, 則刪除 |
7 | intersection(self, *args, **kwargs) |
求兩個集合裏面相同的元素,又稱並 , 返回只保留含有 set 「集合2」中元素的 set 「集合1」 |
8 | intersection_update(self, *args, **kwargs) |
, 返回只保留含有 set 「集合2」中元素的 set 「集合1」 ,並更新本身 |
9 | isdisjoint(self, *args, **kwargs) |
判斷兩個集合是否是不相交,並返回 |
10 | issubset(self, *args, **kwargs) |
判斷集合是否是包含其餘集合,等同於a>=b |
11 | issuperset(self, *args, **kwargs) |
判斷集合是否是被其餘集合包含,等同於a<=b |
12 | pop(self, *args, **kwargs) |
刪除而且返回 set 「集合」中的一個不肯定的元素, 若是爲空則引起 KeyError |
13 | remove(self, *args, **kwargs) |
從 set 「集合」中刪除元素 , 若是不存在則引起 KeyError |
14 | symmetric_difference(self, *args, **kwargs) |
返回一個新的 set 包含 外面 和 裏面 中不重複的元素 也就是兩個集合不重複的元素 |
15 | symmetric_difference_update(self, *args, **kwargs) |
返回含有 set 「裏面」或者 set 「外面」中有而不是二者都有的元素的 set 「外面」 |
16 | union(self, *args, **kwargs) |
把兩個集合鏈接起來,又稱並 |
17 | update(self, *args, **kwargs) |
能夠在集合裏面添加多項 |
1,定義集合
#第一種方法 nums = [1,2,3,4,5,6,7] num_set = set(nums) print(num_set) 結果: {1, 2, 3, 4, 5, 6, 7}
#第二種方法
num_set ={1,2,3,4,5,6,7}
2,增(更新)
set.add()
set.update([])
nums = {1,2,3,4,5,6,7} #set.add()增長只能增長一個,不能增長多個值 # nums.add(8) # print(nums) #set.update()能夠增長一個字符串,能夠增長多個值 # nums.update([8]) # print(nums) # nums.update('8') # print(nums) nums.update([8,9,10]) print(nums)
3,刪
set1.remove(1)
nums = {1,2,3,4,5,6,7} nums.remove(7) print(nums) 結果: {1, 2, 3, 4, 5, 6}
4,查:沒法經過下標索引
5,改:不可變類型沒法修改元素
6,交( &)
nums1 ={1, 2, 3, 4, 5, 6} nums2 ={1, 2, 3, 4, 5, 10,7,8,9} #交的方式一:& a = nums1&nums2 print(a) #並的方式二:intersaction b = nums1.intersection(nums2) print(b) 結果: {1, 2, 3, 4, 5} {1, 2, 3, 4, 5}
7,並(|)
nums1 ={1, 2, 3, 4, 5, 6} nums2 ={1, 2, 3, 4, 5, 10,7,8,9} #並的方式一:| a = nums1|nums2 print(a) #並的方式二:uniom b = nums1.union(nums2) print(b) 結果: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
8,差(-)
nums1 ={1, 2, 3, 4, 5, 6} nums2 ={1, 2, 3, 4, 5, 10,7,8,9} #差的方式一:- a1 = nums1-nums2 print(a1) a2 = nums2-nums1 print(a2) #差的方式二:difference b1 = nums1.difference(nums2) print(b1) b2 = nums2.difference(nums1) print(b2) 結果: {6} {8, 9, 10, 7} {6} {8, 9, 10, 7}
9,對稱差集(^)
nums1 ={1, 2, 3, 4, 5, 6} nums2 ={1, 2, 3, 4, 5, 10,7,8,9} #對稱差集表示方法一:^ a1 = nums1^nums2 print(a1) #對稱差集表示方法二:symmetric_difference a2 = nums2.symmetric_difference(nums1) print(a2) 結果: {6, 7, 8, 9, 10} {6, 7, 8, 9, 10}
10,集合轉換
se = set(range(4)) li = list(se) tu = tuple(se) st = str(se) print(li,type(li)) print(tu,type(tu)) print(st,type(st)) 結果: [0, 1, 2, 3] <class 'list'> (0, 1, 2, 3) <class 'tuple'> {0, 1, 2, 3} <class 'str'>
冰凍集合,是一種特殊的集合類型,也是集合(集合是列表的話,冰凍集合就是元組)
下面建立冰凍集合(通常不會建立空的冰凍集合)
同時下面包含函數的補充
#建立帶數據的冰凍集合 info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi')) print(info,type(info)) #成員監測 result = 'gongzuo' in info print(result) #遍歷冰凍集合 for i in info: print(i) #集合推導式(沒法獲得冰凍集合,能夠獲得集合,列表,元組,字典類型) result = {i for i in info} print(result,type(result)) #函數 #冰凍集合能夠使用集合的函數(不修改集合自己的函數均可以使用) info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi')) #copy() result = info.copy() print(result) #集合操做 交集,並集,差集,對稱差集等 不修改冰凍集合自己就能使用:冰凍集合的操做結果都是冰凍集合 info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi')) info2 = {'xuexi','gongzuo','kaoyan','xiuxi'} #冰凍集合操做 result = info.union(info2) print(result) #普通集合操做(冰凍集合是參考集合) result = info2.union(info) print(result)
字符串操做方法詳解,請看下面博客:http://www.cnblogs.com/wj-1314/p/8419009.html
字典操做方法詳解,請看下面博客:http://www.cnblogs.com/wj-1314/p/8421724.html
列表操做方法詳解,請看下面博客:http://www.cnblogs.com/wj-1314/p/8433116.html