一,集合
1,集合由不同元素组成
2,无序
3,集合中元素必须是不可变类型
二,定义集合
1,s = {1,2,3,4,5}
2,s = set(hello)以迭代的方式生成集合
s = set("hello") print(s) {'o', 'e', 'h', 'l'}
三,集合的方法
1,add添加,如果添加有重复不会报错但是也不会添加
s = {1,2,3} s.add(4) print(s) {1, 2, 3, 4}
2,clear清除
3,copy拷贝
s = {1,2,3} s1 = s.copy() print(s) {1,2,3}
4,pop删除,因为是无序的所以是随机删除
5,remove指定删除,如果指定参数没有则报错不存在KeyError
s = {1,2,3} s.remove(1) print(s) {2,3}
6,discard和remove功能一样不过是假如没有找到关键字不会报错
四,集合的运算
1,并集
假设有两个列表一个列表列出学习python的学生一个列出学习linux的学生请列出既学习了python的又学习了linux的学生
通过循环的方法vim day14-2.py
python_l = ['zhangsan','lisi','wangwu'] linux_l = ['zhangsan','lisi'] python_and_linux_l = [] for p_name in python_l: if p_name in linux_l: python_and_linux_l.append(p_name) print(python_and_linux_l)
['zhangsan', 'lisi']
这种方法比较low下面用集合来处理 vim day14-3.py
python_l = ['zhangsan','lisi','wangwu'] linux_l = ['zhangsan','lisi'] #把列表转换成无序的集合 p_s = set(python_l) l_s = set(linux_l) print(p_s.intersection(l_s))
print(p_s&l_s)
使用print(p_s&l_s)更加简单
2,和集
使用union或者符号
3,差集
直接使用-号即可,存在于键鼠不存在于被减数中的元素
p_s - l_s
4,交叉补集symmetric_difference 符号^ 先合集在减去并集就是交叉补集
python_l = ['zhangsan','lisi','wangwu'] linux_l = ['zhangsan','lisi','dage'] #把列表转换成无序的集合 p_s = set(python_l) l_s = set(linux_l) print(p_s.symmetric_difference(l_s))
5,difference_update求完差集并更新原集合返回值为None 以下操作相当于p_s = p_s - l_s
python_l = ['zhangsan','lisi','wangwu'] linux_l = ['zhangsan','lisi'] #把列表转换成无序的集合 p_s = set(python_l) l_s = set(linux_l) v = p_s.difference_update(l_s) print(p_s,v)
{'wangwu'} None
6,isdisjoint 两个集合没有交集返回True有交集返回False
s1 = {1,2} s2 = {3,4} print(s1.isdisjoint(s2)) True
7,issubset一个集合是否是另外一个集合的子集 如果是返回True如果不是返回False
s1 = {1,2} s2 = {1,2,3,4} print(s1.issubset(s2)) True
8,issuperset判断一个集合是否是另外一个集合的父集
9,update并集并且更新和union不同的是union不会更新
s1 = {1,2} s2 = {1,2,3} s1.update(s2) print(s1) {1,2,3}
五,集合的补充
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']