數據類型--集合
阿新 • • 發佈:2017-12-14
叠代 過濾 clear blog font 情況 another itself one
B就是被調用的表(s2的位置);
數據類型的種類
常用的:
1、數字
2、字符串
3、列表
4、元祖
5、集合
不常用的:
隊列
有序字典
默認字典
集合的特點
1、無序 2、去重(重要) 3、可嵌套 4、關系測試(重要)
創建集合
(一)、回顧:創建列表的2中方法: 1、li = [] #直接創建 2、list() #可以將其他數據類型轉換成列表(相當於在內存有創建一個) 註意: 它會自動去執行list裏面的構造方法__init__。 list __init__,內部執行for循環(11,22,33,44)轉換成[11,22,33,44] 在定義 li=[]的時候,會內部調用list()這種方式。
一、創建集合的註意事項:
1、無序,不重復的序列
1 set = {11,22,11,22} 2 print(set) 3 4 輸出結果: 5 {11, 22}
2、用“{}”來代替,裏面每個元素就是一個值,跟字典的區別就是無需key:values。
3、set的功能: set() == list()
4、將列表轉換成集合的方法:
1 li = [11,22,11,22] 2 s1 = set(li) 3 print(s1,type(s1)) 4 5 顯示結果: 6 {11, 22} <class ‘set‘>
二、創建集合的三種方式:
1、普通創建方法:
11、se = {11,22} 2 例如:se = {"123","456"}
2、創建空集合:
1 s2 = set() 2 這個是通過__init__進行轉換的
3、轉其他數據類型換成集合
1 s3 = set([11,22,33,4])
操作集合
一、添元素:
1 創建空集合: 2 s = set() 3 s.add(123) 4 s.add(123) 5 s.add(123) 6 print(s) 7 8 顯示結果: 9 {123}
註意:上面示例添加了3次123,但是只能顯示一個,因為set集合有去重功能。
擴展:爬蟲訪問過的url放到一個set()中,可以通過去重功能,過濾掉訪問過的url。
二、清空set裏的所有內容:
1 s.clear() 2 print(s) 3 4 顯示結果: 5 set()
三、A中存在B中不存在的
註意:
A是指誰調用的表(s1的位置),B就是被調用的表(s2的位置);
1 #s1中存在s2中不存在的: 2 s1 = {11,22,33} 3 s2 = {22,33,44} 4 s3 = s1.difference(s2) 5 print(s3) 6 7 8 #s2中存在s1中不存在的 9 s3 = s2.difference(s1) 10 print(s3) 11 12 顯示結果: 13 {11} 14 {44}
四、取出A中存在,B中不存在的,然後將結果替換掉A中的元素:
1 s1.difference_update(s2) 2 print("s1:",s1) 3 4 顯示結果: 5 s1: {11}
註意:如果後續的代碼不需要s1裏面的元素時,可以使用帶有Update方法來替換掉
五、對稱差距
把A中存在的B中不存在的取出,
在把B中存在的A中不存在的取出;
1 s1 = {11,22,33} 2 s2 = {22,33,44} 3 4 s3 = s1.symmetric_difference(s2) 5 print(s3) 6 print(s1) 7 print(s2) 8 9 顯示結果: 10 {11, 44} 11 {33, 11, 22} 12 {33, 44, 22}
六、對稱差距更新s1
取出A中存在B中不存在的元素,
取出B中存在A中不存在的元素,
將結果更新到A中
1 s1.symmetric_difference_update(s2) 2 print("更新s1",s1) 3 4 顯示結果: 5 更新s1 {11, 44}
註意:如果後續的代碼不需要s1裏面的元素時,可以使用帶有Update方法來替換掉
七、移除元素:
#移除指定元素,不存在不報錯:(以後推薦使用這個避免bug) s1 = {11,22,33} s1.discard(1111) print("移除1111,數據不存在,不會報錯:",s1) #移除指定元素,如果不存在就直接報錯。 s1 = {11,22,33} s1.remove(22) print("移除指定元素,有就不報錯:",s1) # s1.remove(111) # print("移除指定元素,沒有就報錯:",s1) #移除某個元素,並獲取移除元素的值。(隨機移除,不需要加參數,因為集合是無序的) s1 = {11,22,33,44} ret = s1.pop() #不用加參數 print("集合無序,隨機移除,返回移除的數據",s1) print("顯示pop移除的元素:",ret) 顯示結果: 移除1111,數據不存在,不會報錯: {33, 11, 22} 移除指定元素,有就不報錯: {33, 11} 集合無序,隨機移除,返回移除的數據 {11, 44, 22} 顯示pop移除的元素: 33
註意:使用pop的場景:以後再學到隊列的時候會使用到,一般情況下移除一個元素,然後把移除的這個元素賦值到一個變量,然後在其他引用。
八、取出A和B之間的交集:
1 s1 = {11,22,33} 2 s2 = {22,33,44} 3 s3 = s1.intersection(s2) 4 print("取出s1和s2的交集:",s3) 5 6 7 顯示結果: 8 取出s1和s2的交集: {33, 22}
九、取出A和B之間的交集,並更新到A裏:
1 s1 = {11,22,33} 2 s2 = {22,33,44} 3 4 s1.intersection_update(s2) 5 print("取出A和B之間的交集,並更新到A裏:",s1) 6 7 輸出結果: 8 取出A和B之間的交集,並更新到A裏: {33, 22}
十、判斷是否為包含於被包含的關系:
1 s1 = {11,22,33} 2 s2 = {22,33} 3 s3 = s1.issuperset(s2) 4 print("s1是s2的父序列:",s3) 5 6 s3 = s2.issubset(s1) 7 print("s2是s1的子序列:",s3) 8 9 10 輸出結果: 11 s1是s2的父序列: True 12 s2是s1的子序列: True
十一、取出A和B的並集:
1 s1 = {11,22,33} 2 s2 = {22,33,44} 3 s3 = s1.union(s2) 4 print("顯示A和B的並集:",s3) 5 6 顯示結果: 7 顯示A和B的並集: {33, 22, 11, 44}
十二、批量添加,批量更新(對可循環和可叠代的對象有效)
1 #批量添加,批量更新(對可循環和可叠代的對象有效) 2 s1 = {11,22,33} 3 s1.add(44) 4 s1.add(55) 5 s1.add(66) 6 print("往s1裏添加記錄",s1) 7 8 #eg:列表 9 li = [11,22,3,11,2] 10 s1.update(li) 11 print("將li列表中的元素加入到s1裏:",s1) 12 13 #eg:元祖 14 tuples = (66,77,8,10,2) 15 s1.update(tuples) 16 print("將元祖加入到s1裏:",s1) 17 18 #eg:字符串 19 st = "abiao" 20 s1.update(st) 21 print("將字符串加入到s1裏:",s1) 22 23 24 顯示結果: 25 往s1裏添加記錄 {33, 66, 11, 44, 22, 55} 26 將li列表中的元素加入到s1裏: {33, 66, 3, 2, 11, 44, 22, 55} 27 將元祖加入到s1裏: {33, 66, 3, 2, 8, 10, 11, 44, 77, 22, 55} 28 將字符串加入到s1裏: {33, 66, 3, 2, ‘o‘, 8, ‘i‘, 10, 11, 44, 77, ‘a‘, ‘b‘, 22, 55}
集合的源代碼:
1 class set(object): 2 """ 3 set() -> new empty set object 4 set(iterable) -> new set object 5 6 Build an unordered collection of unique elements. 7 """ 8 def add(self, *args, **kwargs): # real signature unknown 9 """ 10 Add an element to a set,添加元素 11 12 This has no effect if the element is already present. 13 """ 14 pass 15 16 def clear(self, *args, **kwargs): # real signature unknown 17 """ Remove all elements from this set. 清除內容""" 18 pass 19 20 def copy(self, *args, **kwargs): # real signature unknown 21 """ Return a shallow copy of a set. 淺拷貝 """ 22 pass 23 24 def difference(self, *args, **kwargs): # real signature unknown 25 """ 26 Return the difference of two or more sets as a new set. A中存在,B中不存在 27 28 (i.e. all elements that are in this set but not the others.) 29 """ 30 pass 31 32 def difference_update(self, *args, **kwargs): # real signature unknown 33 """ Remove all elements of another set from this set. 從當前集合中刪除和B中相同的元素""" 34 pass 35 36 def discard(self, *args, **kwargs): # real signature unknown 37 """ 38 Remove an element from a set if it is a member. 39 40 If the element is not a member, do nothing. 移除指定元素,不存在不保錯 41 """ 42 pass 43 44 def intersection(self, *args, **kwargs): # real signature unknown 45 """ 46 Return the intersection of two sets as a new set. 交集 47 48 (i.e. all elements that are in both sets.) 49 """ 50 pass 51 52 def intersection_update(self, *args, **kwargs): # real signature unknown 53 """ Update a set with the intersection of itself and another. 取交集並更更新到A中 """ 54 pass 55 56 def isdisjoint(self, *args, **kwargs): # real signature unknown 57 """ Return True if two sets have a null intersection. 如果沒有交集,返回True,否則返回False""" 58 pass 59 60 def issubset(self, *args, **kwargs): # real signature unknown 61 """ Report whether another set contains this set. 是否是子序列""" 62 pass 63 64 def issuperset(self, *args, **kwargs): # real signature unknown 65 """ Report whether this set contains another set. 是否是父序列""" 66 pass 67 68 def pop(self, *args, **kwargs): # real signature unknown 69 """ 70 Remove and return an arbitrary set element. 71 Raises KeyError if the set is empty. 移除元素 72 """ 73 pass 74 75 def remove(self, *args, **kwargs): # real signature unknown 76 """ 77 Remove an element from a set; it must be a member. 78 79 If the element is not a member, raise a KeyError. 移除指定元素,不存在保錯 80 """ 81 pass 82 83 def symmetric_difference(self, *args, **kwargs): # real signature unknown 84 """ 85 Return the symmetric difference of two sets as a new set. 對稱差集 86 87 (i.e. all elements that are in exactly one of the sets.) 88 """ 89 pass 90 91 def symmetric_difference_update(self, *args, **kwargs): # real signature unknown 92 """ Update a set with the symmetric difference of itself and another. 對稱差集,並更新到a中 """ 93 pass 94 95 def union(self, *args, **kwargs): # real signature unknown 96 """ 97 Return the union of sets as a new set. 並集 98 99 (i.e. all elements that are in either set.) 100 """ 101 pass 102 103 def update(self, *args, **kwargs): # real signature unknown 104 """ Update a set with the union of itself and others. 更新 """ 105 passView Code
數據類型--集合