1.概况
是无序的数据结构
集合内的个体统称为元素,每个元素不可重复
所有元素被放在大括号里面,元素之间通过逗号分隔
集合对象是一组无序的可哈希的值,集合元素是不可变的数据类型
2.定义集合
使用大括号语法
基本语法:
{元素1,元素2,元素3,元素4............元素n}
传递重复的值会自动去重
a = {"a","b",3,4,5} print(a)
使用set()函数
创建空集合的时候使用set()函数创建,不能使用大括号,{}是创建的字典
print(set(["a","c","f"])) print(set({"a":4,"f":8})) print(set([1,5,5,6,5,5])) print(set())
3.删除集合
只是删除变量对集合的引用关系,如果还有其余的对他进行引用,仍然有效
a = {"a","v","d"} print(a) del a print(a)
4. 访问集合
使用in或者not in检测是否存在集合元素,但是不能直接访问集合元素
使用len()函数获取集合的长度(元素的个数)
使用for来迭代集合的元素
间接访问,把集合转换成元组或列表,通过下标访问
5.添加元素
1.使用add()方法
a = set(range(20)) print(a) a.add(100) print(a)
如果该元素已存在,则不做任何操作
a = set(range(20)) print(a) a.add(10) print(a)
2.使用update()方法
a = set(range(20)) print(a) #添加一个字符串 a.update("python") print(a) #添加一个列表 a.update([111,222,333]) print(a) #添加一个元组,必须要加一个逗号,不然被判断为字符串 a.update(("sign",)) print(a) #添加一个集合 a.update({"ewioh"}) print(a)
6.删除元素
1.使用remove()
可移除指定元素,没有返回值,如果元素不存在则抛出异常
a = set(range(20)) print(a) a.remove(1) print(a)
如果删除的元素不存在,则抛出异常
a = set(range(20)) print(a) a.remove(100) print(a)
2.使用discard()
可移除指定元素,用法与remove()相同,元素不存在不执行删除操作
a = set(range(20)) print(a) a.discard(10) print(a) a.discard(100) print(a)
3.使用clear()
清空集合元素
a = set(range(20)) print(a) a.clear() print(a)
4.使用pop()
随机删除集合元素,并返回删除的集合元素
a = set(range(20)) l = [] #由于集合的上度是在变化的,所以不能直接访问集合 for i in range(len(a)): #将删除的集合添加到列表中 l.append(a.pop()) print(l)
7.检测元素
使用in或not in
a = {1,2,3} if "a" in a: a.remove("a") if "a" not in a: a.add("a") print(a)
8.合并集合
set1.update(set2)
a = {1,2,3} b = {("python")} a.update(b) print(a)
9.复制集合
set.copy()
a = {1,2,3} b = a.copy() print(b)
使用copy模块
import copy a = {1,2,3} b = copy.copy(a) print(b)
10.集合推导式
语法格式:
{表达式 for 变量 in 可迭代的对象}
{表达式 for 变量 in 可迭代的对象 if 条件表达式}
l = [1,3,446,6,67,3] b = {i*2 for i in l} print(b)
11.集合并集
合集,把两个集合合并在一起,形成一个新的集合
1.使用|运算符
语法格式:
set1|set2
a = {1,2,3} b = {3,4,5} c = a|b print(c)
2.使用union()方法
语法格式:
合集= set.union(set1)
a = {1,2,3} b = {3,4,5} c = a.union(b) print(c)
3.使用union ()函数
合集= set.union(set1,set2,set3,..........setn)
a = {1,2,3} b = {3,4,5} c = set.union(a,b) print(c)
12.集合交集
计算两个集合共有的元素,也就是两个集合重复的元素
1.使用&运算符
语法格式:
并集 = set1&set2
a = {2,3,4,5} b = {4,5,6} c = {5,6,7,8} d = a&b&c print(d)
2.使用intersection()方法
语法格式:
并集 = set1.intersection(set2)
a = {2,3,4,5} b = {4,5,6} c = {5,6,7,8} d = a.intersection(b,c) print(d)
3.使用set.intersection()函数
语法格式:
并集 = set.intersection(set1,set2,set3.........setn)
a = {2,3,4,5} b = {4,5,6} c = {5,6,7,8} d = set.intersection(a,b,c) print(d)
4.使用set.intersection_update()方法
语法格式:
并集 = set1.intersection_update(set2,set2,set3.........setn)
a = {2,3,4,5} b = {4,5,6} c = {5,6,7,8} a.intersection_update(b,c) print(a)
13.差集
由所有属于集合A,但是不属于集合B的元素组成的集合,简单说就是A与B的差集
1.使用-运算符
语法格式:
差集 = set1 - set2
a = {1,2,3,4,5} b = {2,3,5,7,8} c = a - b print(c)
2.使用difference()方法
语法格式:
差集 = set1.difference(set2)
返回一个新的集合
a = {1,2,3,4,5} b = {2,3,5,7,8} c = a.difference(b) print(c)
3.使用difference_update()方法
语法格式:
set1.difference_update(set2)
没有返回结果,只是在原来的集合上面进行修改
a = {1,2,3,4,5} b = {2,3,5,7,8} a.difference_update(b) print(a)
14.对称差集
由A与B的差集和B与A的差集的合集,简单说就是A和B非公有的元素集合
1.使用-运算符
语法格式:
对称差集 = set1 ^ set2
a = {1,2,3,4,5} b = {2,3,5,7,8} c = a ^ b print(c)
2.使用symmetric_difference()方法
语法格式:
差集 = set1.symmetric_difference(set2)
返回一个新的集合
a = {1,2,3,4,5} b = {2,3,5,7,8} c = a.symmetric_difference(b) print(c)
3.使用symmetric_difference_update()方法
语法格式:
set1.symmetric_difference_update(set2)
没有返回结果,只是在原来的集合上面进行修改
a = {1,2,3,4,5} b = {2,3,5,7,8} a.symmetric_difference_update(b) print(a)
15.包含关系
1.真父集 >
A > B
如果集合B中任意一个元素都是集合A的元素,且集合A的长度大于集合B的长度,那么集合A就是集合B的真父集
2.父集 >=
A >= B 等价于 A.issuperset(B)
如果集合B中任意一个元素都是集合A的元素,集合A的长度可以等于集合B的长度,那么集合A就是集合B的父集
3.真子集 <
A < B
如果集合A中任意一个元素都是集合B的元素,且集合B的长度大于集合A的长度,那么集合A就是集合B的真子集
4.子集 =< 等价于 A.issubset(B)
A =< B
如果集合A中任意一个元素都是集合B的元素,集合A的长度可以等于集合B的长度,那么集合A就是集合B的子集
16.不包含关系
!= A !=B 等价于 A.isdisjoint(B)
如果集合A中的任意一个元素都不是集合B的元素,且集合B中的任意一个元素都不是集合A中的元素,那么集合A与集合B是不相交,或者说是不包含