一、集合
1、集合是由不同元素组成
2、集合是无序的
3、集合中元素必须是不可变类型(字符串、数字、元组)
二、集合的定义
1、s = {1,2,3,4,5}
2、s = set(hello) 通过迭代的方式生产集合
s = "hello"
ret = set(s)
print(ret)
{'l', 'e', 'h', 'o'}
三、集合的方法
1、添加 add 如果添加有重复不会报错,但是不会添加。
ret = {1,2,3}
ret.add(4)
print(ret)
{1, 2, 3, 4}
2、clear 清除 (清空集合)
3、copy 拷贝
s = {1,2,3}
s1 = s.copy()
print(s1)
{1,2,3}
4、pop删除,集合是无序的,所以是随机删除
5、remove指定删除,如果指定删除没有则会报不存在KeyError
s = {1,2,3,4}
s.remove(2)
print(s)
{1,3,4}
6、discard和remove功能一样,不同之处是假如没有找到关键字不会报错
四、集合的运算
1、并集
假设有两个列表,一个列表列出学习python的学生,一个列表列出学习linux的学生,请列出既学习linux又学习了python的学生。
python1 = ["zhangsan","lisi","wangwu"]
linux1 = ["zhangsan","lisi"]
p_s = set(python1)
l_x = set(linux1)
print(p_s.intersection(l_x))
print(p_s&l_x)
{'zhangsan', 'lisi'}
{'zhangsan', 'lisi'}
2、合集
使用union或者符合 |
python1 = ["zhangsan","lisi","wangwu"]
linux1 = ["zhangsan","lisi"]
p_s = set(python1)
l_x = set(linux1)
print(p_s|l_x)
print(p_s.union(l_x))
{'lisi', 'zhangsan', 'wangwu'}
{'lisi', 'zhangsan', 'wangwu'}
3、差集
差集 difference 或者 -
python1 = ["zhangsan","lisi","wangwu"]
linux1 = ["zhangsan","lisi"]
p_s = set(python1)
l_x = set(linux1)
print(p_s.difference(l_x))
print(p_s-l_x)
{'wangwu'}
{'wangwu'}
4、交叉补集 使用symmetric_differcence或者符号^。先合集再减去并集得出的就是交叉补集。
python1 = ["zhangsan","lisi","wangwu"]
linux1 = ["zhangsan","zhaoliu"]
p_s = set(python1)
l_x = set(linux1)
print(p_s^l_x)
print(p_s.symmetric_difference(l_x))
{'lisi', 'wangwu', 'zhaoliu'}
{'lisi', 'wangwu', 'zhaoliu'}
5、difference_update求完差集并更新原集合,返回值为None,相当于p_s = p_s - l_s
python1 = ["zhangsan","lisi","wangwu"]
linux1 = ["zhangsan","zhaoliu"]
p_s = set(python1)
l_x = set(linux1)
v = p_s.symmetric_difference_update(l_x)
print(p_s,v)
{'zhaoliu', 'lisi', 'wangwu'} None
6、isdisjoint 两个集合没有交集返回True,有交集返回False
s1 = {1,2}
s2 = {3,4}
print(s1.isdisjoint(s2))
True
7、issubset 一个集合是否是另外一个集合旳子集,如果是 返回True 如果不是返回False
s1 = {1,2,3,4}
s2 = {1,3}
print(s2.issubset(s1))
True
8、issuperset 判断一个集合是否是另一个集合的父集
9、update并集并且更新,union不会更新
s1 = {1,2,3}
s2 = {2,3,4}
s1.update(s2)
print(s1)
{1,2,3,4}
五、集合的补充
1、frozenset 定义不可变集合
s = frozenset('hello')
print(s)
frozenset({'e', 'h', 'l', 'o'})
2、列表使用集合的方法去重,但是生成的列表顺序可能和原序列不同
names = ['zhangsan','zhangsan','lisi']
names = list(set(names))
print(names)
['lisi', 'zhangsan']