一.set集合
set是一个无序且不重复的元素集合
1 print(dir(set)) 2 3 #[‘__and__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__iand__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__ior__‘, ‘__isub__‘, ‘__iter__‘, ‘__ixor__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘, ‘__or__‘, ‘__rand__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__ror__‘, ‘__rsub__‘, ‘__rxor__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__sub__‘, ‘__subclasshook__‘, ‘__xor__‘, ‘add‘, ‘clear‘, ‘copy‘, ‘difference‘, ‘difference_update‘, ‘discard‘, ‘intersection‘, ‘intersection_update‘, ‘isdisjoint‘, ‘issubset‘, ‘issuperset‘, ‘pop‘, ‘remove‘, ‘symmetric_difference‘, ‘symmetric_difference_update‘, ‘union‘, ‘update‘]
1 l1 = [‘11‘, ‘22‘, ‘33‘,] 2 l2 = [‘44‘, ‘55‘, ‘66‘, ] 3 4 s1 = set(l1) #将一组可迭代的数据传入set集合 5 print(s1) 6 7 s1.add(‘alex‘) #给s1添加一个新元素alex, 8 print(s1) 9 10 s1.add(‘alex‘) #给s1传入一个相同的元素后,对比输出结果二和三,结果并没有改变,由此可见s1集合是一个无序且不重复的元素集合 11 print(s1) 12 13 #{‘11‘, ‘33‘, ‘22‘} #第一次输出 14 #{‘11‘, ‘33‘, ‘22‘, ‘alex‘} #第二次输出 15 #{‘11‘, ‘33‘, ‘22‘, ‘alex‘} #第三次输出
add 添加不重复的元素
1 #difference生成一个新的集合,将新传入的集合移除掉,不能对原来的集合进行修改,需要重新赋值给一个变量 2 3 s2 = set([‘alex‘, ‘eric‘, ‘tony‘, ]) 4 s3 = s2.difference([‘alex‘, ‘eric‘]) 5 print(s3) 6 #结果输出 {‘tony‘}
difference 差异比较
1 s2 = set([‘alex‘, ‘eric‘, ‘tony‘, ‘alex‘]) 2 s4 = s2.difference_update([‘alex‘, ‘eric‘,‘jack‘]) 3 print(s2) #结果输出 {‘tony‘} 4 print(s4) #结果输出 None 5 6 #difference_update将原来的集合修改,difference_update和difference都是将新传入的集合删掉,不同之处在于difference是生成一个新的集合,difference_update是对原来的集合进行修改,不会生成一个新的集合
difference_update 差异更新
1 s2 = set([‘alex‘, ‘eric‘, ‘tony‘,]) 2 s3 = s2.discard(‘eric‘) 3 print(s2) 4 5 #结果输出{‘tony‘, ‘alex‘}
discard删除一个元素
1 #pop随机删除一个元素,并获取删除的这个元素,可将删除的这个元素赋值给变量 2 3 s2 = set([‘alex‘, ‘eric‘, ‘tony‘,]) 4 ret = s2.pop() 5 print(s2) #结果输出{‘alex‘, ‘eric‘} 6 print(ret) #从新赋值给变量ret ,结果输出 tony
pop 随机删除元素
1 #remove移除元素,需要指定参数,remove没有返回值 2 3 s2 = set([‘alex‘, ‘eric‘, ‘tony‘,]) 4 s2.remove(‘eric‘) 5 print(s2) #结果输出 {‘alex‘, ‘tony‘}
remove移除指定元素
1 l1 = [‘alex‘, ‘eric‘, ‘jack‘, ‘laiying‘,] 2 l2 = [‘jack‘, ‘tom‘, ‘laiying‘,] 3 s1 = set(l1) 4 s2 = set(l2) 5 print(s1) 6 s3 = s1.intersection(s2) 7 print(s1) 8 print(s2) 9 print(s3) 10 11 12 #{‘eric‘, ‘alex‘, ‘laiying‘, ‘jack‘} 第一次原始集合 13 #{‘eric‘, ‘alex‘, ‘laiying‘, ‘jack‘} 集合s1和s2进行交集判断后的输出结果,并没有改变对象本身 14 #{‘laiying‘, ‘tom‘, ‘jack‘} s2集合没有发送改变 15 #{‘laiying‘, ‘jack‘} 通过交集比较,返回了一个新的元素集合,返回的是s1和s2共同拥有的元素集合
intersection取交集元素集合
1 l1 = [‘alex‘, ‘eric‘, ‘jack‘, ‘laiying‘,] 2 l2 = [‘jack‘, ‘tom‘, ‘laiying‘,] 3 s1 = set(l1) 4 s2 = set(l2) 5 print(s1) 6 7 s3 = s1.intersection_update(s2) 8 print(s1) 9 print(s3) 10 11 #通过输出结果可以看出,s1直接更新了自己,把与传入的集合,与集合里面不相同的元素删掉,且没有返回值 12 {‘laiying‘, ‘eric‘, ‘alex‘, ‘jack‘} 13 {‘laiying‘, ‘jack‘} 14 None
indersection_update 交集更新
1 l1 = [‘alex‘, ‘eric‘,] 2 l2 = [‘tom‘, ‘jack‘,] 3 s1 = set(l1) 4 s2 = set(l2) 5 print(s1) 6 7 s3 = s1.isdisjoint(s2) 8 print(s1) 9 print(s3) 10 11 #{‘eric‘, ‘alex‘} 12 #{‘eric‘, ‘alex‘} 13 #True 14 15 #当两个集合之间没有任何交集时,就返回True,否则就返回False
isdisjoint判断是否没有交集
1 l1 = [‘alex‘, ‘eric‘, ‘jack‘,] 2 l2 = [‘tom‘,‘laiying‘,] 3 s1 = set(l1) 4 s2 = set(l2) 5 s3 = set([‘alex‘, ‘jack‘,]) 6 7 8 print(s1.issubset(s2)) #输出为False说明s1不是s2的子集 9 print(s1.issubset(s3)) #输出False说明不是s3的子集 10 print(s3.isdisjoint(s1)) #输出True说明s3是s1的子集 11 12 #结果输出 13 #False 14 #False 15 #True
issubset 是否是子集
1 l1 = [‘alex‘, ‘eric‘, ‘jack‘,] 2 l2 = [‘tom‘,‘laiying‘,] 3 s1 = set(l1) 4 s2 = set(l2) 5 s3 = set([‘alex‘, ‘jack‘,]) 6 7 print(s1.issuperset(s3)) #结果输出True,说明s1是s3的父集 8 print(s3.issuperset(s1)) #结果输出False,说明s3不是s1的父集
issuperset是否是父集
1 #symmetric_difference,该对象返回一个新的集合,传入的元素与对象本身比较,如果传入的元素里面有的元素,而对象本身没有,则添加到对象本身集合内,最终返回一个新的集合 2 3 l1 = [‘alex‘, ‘eric‘, ‘jack‘,] 4 l2 = [‘tom‘,‘laiying‘,] 5 s1 = set(l1) 6 s2 = set(l2) 7 s3 = set([‘alex‘, ‘jack‘,]) 8 print(s1) 9 #结果输出 {‘eric‘, ‘alex‘, ‘jack‘} 10 s4 = s1.symmetric_difference(s2) 11 12 print(s1) 13 #结果输出 {‘eric‘, ‘alex‘, ‘jack‘} 14 print(s4) 15 #结果输出{‘eric‘, ‘alex‘, ‘tom‘, ‘laiying‘, ‘jack‘}
symmetric_difference 差集对比
1 #symmetric_difference_update差集更新,直接扩展对象本身与传入集合的没有交集的元素 2 3 l1 = [‘alex‘, ‘eric‘, ‘jack‘,] 4 l2 = [‘tom‘,‘laiying‘,] 5 s1 = set(l1) 6 s2 = set(l2) 7 8 print(s1) #s1原始集合,结果输出 {‘eric‘, ‘alex‘, ‘jack‘} 9 s4 = s1.symmetric_difference_update(s2) 10 print(s1) #s1差集后的结果输出{‘laiying‘, ‘eric‘, ‘alex‘, ‘jack‘, ‘tom‘} 11 print(s4) #该方法没有返回值 None
s1.symmetric_difference_update 差集更新
1 #union返回新集合,j将对象本身与传入的集合元素比较,把所有的元素重新组合成一个新的集合返回 2 l1 = [‘alex‘, ‘eric‘, ‘jack‘,] 3 l2 = [‘tom‘,‘laiying‘,] 4 s1 = set(l1) 5 s2 = set(l2) 6 s4 = s1.union(s2) 7 8 print(s1) #结果输出{‘eric‘, ‘alex‘, ‘jack‘},对象本身没有变化 9 print(s4) #结果输出{‘laiying‘, ‘jack‘, ‘alex‘, ‘tom‘, ‘eric‘}
union 返回新集合
1 #update更新集合,将会对集合本身进行扩展,如果对象本身不存在这个传入的元素,则添加到对象本身的元素集合 2 3 dic1 = {‘k1‘:‘v1‘, ‘k2‘:‘v2‘} 4 dic2 = {‘k1‘:‘v1‘, ‘k2‘:‘v2‘, ‘k3‘:‘v3‘} 5 s1 = set(dic1) 6 print(s1) #结果输出{‘k1‘, ‘k2‘} 7 8 s2 = s1.update(dic2) 9 print(s1) #结果输出 {‘k3‘, ‘k1‘, ‘k2‘}
update更新集合
时间: 2024-10-24 18:32:23