七、python沉淀之路--集合
一、
1、字符串转集合
1 s = 'hello' 2 se = set(s) 3 print(se)
1 {'e', 'o', 'h', 'l'}
2、列表转集合
1 l1 = ['hello','python','nice'] 2 se1 = set(l1) 3 print(se1)
1 {'nice', 'python', 'hello'}
3、add:添加元素
1 s = {1,2,3,4,5,6,} 2 s.add(9) 3 print(s)
1 {1, 2, 3, 4, 5, 6, 9}
4、clear:清空
1 s1 = {1,2,3,4,5} 2 s1.clear() 3 print(s1)
1 set()
5、copy:复制
1 s = {1,2,3,4,5,6,} 2 s0 = s.copy() 3 print(s0)
1 {1, 2, 3, 4, 5, 6}
6、pop:随机删除一个元素
1 s = {'hello',2,'python',3,4,5,6,'china',1} 2 s.pop() 3 print(s)
7、remove:删除指定元素,元素不存在时,会报错
1 s = {'hello',2,'python',3,4,5,6,'china',1} 2 s.remove('python') 3 print(s) 4 s.remove(4) 5 print(s) 6 # s.remove(9) #会报错 7 # print(s)
1 {1, 2, 3, 4, 5, 6, 'china', 'hello'} 2 {1, 2, 3, 5, 6, 'china', 'hello'}
8、discard:指定删除,元素不存在时,不会报错,会把原集合打印出来
1 s = {'hello',2,'python',3,4,5,6,'china',1} 2 s.discard(2) 3 print(s) 4 s.discard('python') 5 print(s) 6 s.discard(9) 7 print(s)
1 {1, 3, 4, 5, 6, 'hello', 'python', 'china'} 2 {1, 3, 4, 5, 6, 'hello', 'china'} 3 {1, 3, 4, 5, 6, 'hello', 'china'}
9、交集(intersection & )、并集(union | )、差集( difference - )、交叉补集(symmetric_difference)
1 py_s = {'张三','张思','王五','王六'} 2 lix_s = {'赵七','赵八','王五','王六' } 3 print('交集',py_s.intersection(lix_s)) 4 print('交集',py_s & lix_s) 5 6 print('补集',py_s.union(lix_s)) 7 print('补集',py_s | lix_s) 8 9 print('差集', py_s.difference(lix_s)) 10 print('差集', py_s - lix_s) 11 print('差集',lix_s.difference(py_s)) 12 print('差集',lix_s - py_s) 13 14 print('交叉补集',py_s.symmetric_difference(lix_s)) 15 print('交叉补集',py_s ^ lix_s)
1 交集 {'王六', '王五'} 2 交集 {'王六', '王五'} 3 补集 {'赵八', '王五', '赵七', '王六', '张思', '张三'} 4 补集 {'赵八', '王五', '赵七', '王六', '张思', '张三'} 5 差集 {'张思', '张三'} 6 差集 {'张思', '张三'} 7 差集 {'赵八', '赵七'} 8 差集 {'赵八', '赵七'} 9 交叉补集 {'赵八', '赵七', '张思', '张三'} 10 交叉补集 {'赵八', '赵七', '张思', '张三'}
注:差集的先后顺序不一样,结果也不一样
10、difference_update :更新完复制,即改变了原来的集合
1 py_s = {'张三','张思','王五','王六'} 2 lix_s = {'赵七','赵八','王五','王六' } 3 py_s.difference_update(lix_s) #相当于 py_s = py_s - lix_s 4 print(py_s)
1 {'张思', '张三'}
11、issubset:判断子集,issuperset:判断父集
1 s1 = {1,2,3} 2 s2 = {1,2,3,4,5} 3 print('s1是s2的子集',s1.issubset(s2)) 4 print('s2是s1的父集',s2.issuperset(s1))
1 s1是s2的子集 True 2 s2是s1的父集 True
12、update:一次性可以更新多个值,即可以通过更新把多个值加入进去
1 s1 = {1,2,3} 2 s2 = {1,2,3,4,5} 3 s1.update(s2) 4 print(s1)
1 {1, 2, 3, 4, 5}
对比add功能,add一次性只能加一个值进去
13、frozenset这是一种特殊的定义集合的方式:它定义的集合不可变
1 s=frozenset('hello') 2 print(s)
二、 集合的一些零散知识汇集
1、集合:具备三个条件:一是由不同元素组成;二是无序;三是其元素只能是数字、字符串、元素
也就是里面的元素必须不可哈希,(哈希简单理解就是 不可变的类型)
2、集合 可以增加、 删除、 但不能修改,所以集合是可变的。
3、集合可用于测试,用 in 来判断某元素是否是里面元素
三、字符串、 列表、元素、字典、集合 ,简单总结对比
1、字符串不可用索引来修改,因为不可变,但是可以用索引来取值
2、元组 是对列表的加工,其元素不可被修改,不能被增加 或 删除, 元组最后一个元素后面建议都加一个逗号,方便区分
3、元素 也可以 索引 、 切片 、 for 循环,
4、元组 有序,是可迭代对象
5、字典无序
可变:列表、字典
不可变:字符串、元组、数字
顺序访问:字符串、数字、元组
映射访问:字典
直接访问:数字
存放元素个数
容器类型:列表、元素、字典
元素类型:字符串