Python数据结构之集合类型(set)
集合类型(set)
-
集合定义
-
集合-增加元素
-
集合-删除元素
-
集合-查看元素
-
交集
-
并集
-
差集
-
反交集
-
子集与超集
-
set内置函数
-
frozenset不可变集合,让集合变成不可变类型;
一、集合定义
集合(set)是一个无序的、元素不重复的序列;
集合的元素都是不可变类型的
使用大括号 { } 或者set()函数创建,注意:创建一个空集合必须使用set()而不是 { },因为 { } 是用来创建一个空字典;
创建集合:
se = {"a","b","c",(1,2,3)} se1 = set("123") se2 = set((1,2,3,4,5,)) print(se) print(se1) print(se2) ---------------------输出结果---------------------------------- {'c', 'b', 'a', (1, 2, 3)} {'3', '1', '2'} {1, 2, 3, 4, 5}
二、集合-增加元素
1.s.add(x)
说明:将元素x添加到集合s中,如果元素已存在,则不进行任何操作;
实例:
se = set(("zjk","china","beijing")) se.add("hello world") print(se) --------------------输出结果--------------------- {'beijing', 'china', 'zjk', 'hello world'}
2.s.update(x)
说明:添加元素,参数可以是列表,元组、字典等;
实例:
se = {"a","b","c","d","e"} se.update([1,2,3,4,5]) print(se) -------------输出结果------------------- {'a', 1, 2, 3, 'e', 'b', 4, 5, 'c', 'd'}
三、集合-删除元素
1.s.remove(x)
说明:将元素x从集合s中删除,如果该元素不存在,则报错;
实例:
se = {"a","b","c","d","e"} se.remove("d") print(se) ----------------输出结果--------------------- {'e', 'b', 'a', 'c'}
se = {"a","b","c","d","e"}
se.remove("dddd")
print(se)
-----------------输出结果------------------
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/123.py", line 2, in <module>
se.remove("dddd")
KeyError: 'dddd'
2.s.discard(x)
说明:将元素x从集合中删除,如果该元素不存在,不会发生错误并返回当前集合
实例:
se = {"a","b","c","d","e"} se.discard("e") print(se) ------------------输出结果----------------------- {'d', 'a', 'b', 'c'} se = {"a","b","c","d","e"} se.discard("eeee") print(se) -----------------------输出结果------------------- {'b', 'c', 'd', 'a', 'e'}
3.pop()
说明:随机删除集合的一个元素,并返回这个被删除的元素;
实例:
se = {"a","b","c","d","e"} a = se.pop() print(se,a) -----------------输出结果------------------- {'c', 'b', 'e', 'a'} d
4.s.clear()
说明:清空集合s
实例:
se = {"a","b","c","d","e"} se.clear() print(se) ------------输出结果--------------- set()
四、集合-查看元素
通过for循环遍历集合的元素;
实例:
>>> se = {"a","b","c",(1,2,3,4)} >>> for n in se: ... print(n) ... a (1, 2, 3, 4) c b
五、交集(& 或者 intersection)
>>> se1 = {1,2,3,4,5} >>> se2 = {4,5,6,7,8} >>> print(se1 & se2) {4, 5} >>> print(se1.intersection(se2)) {4, 5}
六、并集(| 或者 union)
>>> se1 = {1,2,3,4,5} >>> se2 = {4,5,6,7,8} >>> print(se1 | se2) {1, 2, 3, 4, 5, 6, 7, 8} >>> print(se2.union(se1) ... ) {1, 2, 3, 4, 5, 6, 7, 8}
七、差集(- 或者 difference)
>>> se1 = {1,2,3,4,5} >>> se2 = {4,5,6,7,8} >>> print(se1 - se2) {1, 2, 3} >>> print(se1.difference(se2)) {1, 2, 3}
八、反交集(^ 或者 symmetric_difference)
>>> se1 = {1,2,3,4,5} >>> se2 = {4,5,6,7,8} >>> print(se1 ^ se2) {1, 2, 3, 6, 7, 8} >>> print(se1.symmetric_difference(se2)) {1, 2, 3, 6, 7, 8}
九、子集与超集
>>> se1 = {1,2,3} >>> se2 = {1,2,3,4,5,6} >>> print(se1 < se2) True >>> print(se1.issubset(se2)) True #这两个用法相同,都是说明se1是se2的子集 >>> print(se2 > se1) True >>> print(se2.issuperset(se1)) True #这两个都相同,都是说明se2是se1超集。
十、set内置函数
1.add(self, *args, **kwargs)
说明:向集合中添加元素;
语法:set.add(*args, **kwargs)
实例:
>>> se1.add(4) >>> se1 = {1,2,3} >>> se1.add(4) >>> print(se1) {1, 2, 3, 4}
2.clear(self, *args, **kwargs)
说明:清空集合;
语法:set.clear()
实例:
>>> se1 = {1,2,3} >>> se1.clear() >>> print(se1) set()
3.copy(self, *args, **kwargs)
说明:返回集合的浅拷贝;
语法:set.copy()
实例:
>>> se1 = {1,2,3,(4,5,6)} >>> se2 = se1.copy() >>> print(se2) {1, 2, 3, (4, 5, 6)}
4.difference(self, *args, **kwargs)
说明:将两个或多个集合的差集作为一个新集合返回;
语法:se1.difference(se2)
实例:
>>> se1 = {1,2,3,4,5} >>> se2 = {4,5,6,7,8} >>> print(se1 - se2) {1, 2, 3} >>> print(se1.difference(se2)) {1, 2, 3}
5.difference_update(self, *args, **kwargs)
说明:从这个集合中删除另一个集合的所有元素
语法:set.difference_update(set1)
实例:
>>> s = {1,2,3} >>> s1 = {1,2,3,4} >>> s2 = {2,3} >>> s.difference_update(s2) >>> s {1} >>> s1.difference_update(s2) >>> s1 {1, 4}
6.discard(self, *args, **kwargs)
说明:删除集合中的一个元素,如果该元素不存在,则不执行任何操作;
语法:set.discard(x)
实例:
>>> s1 = {1,2,3,4} >>> s1.discard(3) >>> s1 {1, 2, 4} >>> s1.discard("a") >>> s1 {1, 2, 4}
7.intersection(self, *args, **kwargs)
说明:将两个集合的交集作为一个新集合返回
语法:set.intersection(set1)
实例:
>>> s1 = {1,2,3,4} >>> s2 = {3,4,5,6} >>> s3 = s1.intersection(s2) >>> s3 {3, 4}
8.intersection_update(self, *args, **kwargs)
说明:用自己和另一个的交集来更新这个集合;
语法:s.intersection_upfate(s2)
实例:
>>> s = {"a","b","c","d","e"} >>> s1 = {"c","d","e","e","f","g"} >>> s.intersection_update(s1) >>> s {'d', 'c', 'e'}
9.isdisjoint(self, *args, **kwargs)
说明:如果两个集合有一个空交集,返回True
语法:set.isdisjoint(set1)
实例:
>>> s = {1,2} >>> s1 = {3,4} >>> s2 = {2,3} >>> s.isdisjoint(s1) True >>> s.isdisjoint(s2) False
10.issubset(self, *args, **kwargs)
说明:如果另一个集合包含这个集合,返回True
语法:s.issubset(set1)
实例:
>>> s = {1,2,3} >>> s1 = {1,2,3,4} >>> s2 = {2,3} >>> s.issubset(s1) True >>> s.issubset(s2) False >>> s2.issubset(s) True
11.issuperset(self, *args, **kwargs)
说明:如果这个集合包含另一个集合,返回True;
语法:s.issuperset(s1)
实例:
>>> s = {1,2,3} >>> s1 = {1,2,3,4} >>> s2 = {2,3} >>> s1.issuperset(s) True >>> s.issuperset(s2) True >>> s2.issuperset(s1) False
12.pop(self, *args, **kwargs)
说明:删除并返回任意的集合元素(如果集合为空,会引发KeyError)
语法:s.pop()
实例:
>>> s = {1,2,3,4,5,6} >>> s.pop() 1 >>> s {2, 3, 4, 5, 6}
13.remove(self, *args, **kwargs)
说明:删除集合中的一个元素(如果元素不存在,会引发KeyError)
语法:set.remove(x)
实例:
>>> s = {1,2,3,4,5,6} >>> s.remove(4) >>> s {1, 2, 3, 5, 6} >>> s.remove(99) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 99 >>> s {1, 2, 3, 5, 6}
14.symmetric_difference(self, *args, **kwargs)
说明:将两个集合的对称差作为一个新集合返回(两个集合合并删除相同部分,其余保留)
语法:s.symmetric_difference(s1)
实例:
>>> s1 = {1,2,3,4,5,6,7,8} >>> s2 = {3,4,5,6,7,8,9,10} >>> s1.symmetric_difference(s2) {1, 2, 9, 10} >>> s2.symmetric_difference(s1) {1, 2, 9, 10}
15.symmetric_difference_update(self, *args, **kwargs)
说明:用自己和另一个的对称差来更新这个集合
语法:s.symmetric_difference_update(s1)
实例:
>>> s = {1,2,3} >>> s1 = {1,2,3,4} >>> s2 = {2,3} >>> s1.symmetric_difference_update(s) >>> s1 {4} >>> s1.symmetric_difference_update(s2) >>> s1 {2, 3, 4} >>> s.symmetric_difference_update(s2) >>> s {1}
15.union(self, *args, **kwargs)
说明:将集合的并集作为一个新集合返回;
语法:s.union(s1)
实例:
>>> s = {1,2,3,4,5,6} >>> s1 = {3,4,5,6,7,8} >>> print(s.union(s1)) {1, 2, 3, 4, 5, 6, 7, 8} >>> print(s|s1) {1, 2, 3, 4, 5, 6, 7, 8}
16.update(self, *args, **kwargs)
说明:用自己和另一个的并集来更新这个集合;
语法:s.update(*args, **kwargs)
实例:
>>> s = {"p","y"} >>> s.update("t","h","o","n") >>> s {'p', 'h', 't', 'n', 'y', 'o'} >>> s.update(["q","e"],{"l","l","o"}) >>> s {'q', 'p', 'h', 't', 'n', 'y', 'o', 'e', 'l'}
十一、frozenset不可变集合,让集合变成不可变类型
>>> s = frozenset("zjk") >>> print(s,type(s)) frozenset({'z', 'k', 'j'}) <class 'frozenset'>