#作用:去重,关系运算,
#定义:
知识点回顾
可变类型是不可hash类型
不可变类型是可hash类型
#定义集合:
集合:可以包含多个元素,用逗号分割,
集合的元素遵循三个原则:
1:每个元素必须是不可变类型(可hash,可作为字典的key)
2:没有重复的元素
3:无序
!!!注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
#优先掌握的操作:
#1、集合的定义以及3个注意点
#2、集合的关系运算
#3、len,in not in
#4、for循环遍历集合
#需要掌握:(*****)
#1、集合的去重以及局限性
#2、往集合内添加或删除元素,add,update,pop,remove,discard
pythoners=['alexdsb','egon','lxxdsb','oldboy','吴三江','张铁蛋'] linuxers=['张刚蛋','李铜弹','赵银蛋','alexdsb','oldboy','李蛋蛋'] l=[] for item in pythoners: if item in linuxers: l.append(item) print(l)
# 集合类型:
#作用:
#1、去重
#2、关系运算
# 定义:逗号分隔开多个元素
# 注意:
# 1、每一个元素都必须是不可变类型
# 2、集合内元素不能重复
# 3、集合内元素无序
s={1,2,1,1,1,1,1,1,1} #s=set({1,2}) print(type(s)) print(s) s=set('hello') #{} print(s)
#1、|合集
#2、&交集
#3、-差集
#4、^对称差集
#5、==
#6、父集:>,>=
#7、子集:<,<=
#1、关系运算 pythoners={'alexdsb','egon','lxxdsb','oldboy','吴三江','张铁蛋'} linuxers={'张刚蛋','李铜弹','赵银蛋','alexdsb','oldboy','李蛋蛋'} #1.1、求既报名linux又包名python的学员有哪些=》即求两个集合体的共同部分,称之为交集 print(pythoners & linuxers) print(pythoners.intersection(linuxers)) #1.2、求只报名python,没有报名linux的学员有哪些=》即集合pythoners减去linuxers,称之为差集 print(pythoners - linuxers) print(pythoners.difference(linuxers)) #1.3、求只报名linux,没有报名python的学员有哪些 print(linuxers - pythoners) print(linuxers.difference(pythoners)) #1.4 求老男孩所有报名的学生姓名->即求两个集合体的总和,称之为并集 print(pythoners | linuxers) print(pythoners.union(linuxers)) #1.5 求没有同时报名两门课程的学生姓名->称之为对称差集 print(pythoners ^ linuxers) print(pythoners.symmetric_difference(linuxers)) #1.6 == s1={1,2,3} s2={3,2,1} print(s1 == s2) # 注意:只有在两个集合存在包含与被包含的关系时才可以进行大小的比较 #1.7、父集:>,>= s1={1,2,3} s2={1,2} print(s1 > s2) # s1是s2的父集 print(s1 >= s2) # s1是s2的父集 print(s1.issuperset(s2)) #s1 >= s2 s3={1,2,3} s4={3,4,5,6} print(s4 >= s3) #1.8、子集:<,<= print(s2.issubset(s1)) #s2 <= s1 print(len({1,2,3})) print(1 in {1,2,3}) # 集合其他的内置方法 s1={1,2,3,4,5} print(id(s1)) s1.add(6) print(s1) print(id(s1)) s2={3,4} s1.difference_update(s2) ## s1=s1.difference(s2) #s1=s1 - s2 print(s1) s3={6,7} print(s1.isdisjoint(s3)) # 删除 print(s1.pop()) # 随机删除 s1.discard(333333) # 指定元素删除,,如果元素不存在也不报错 s1.remove(3333) # 指定元素删除,如果元素不存在则报错 print(s1) s1={1,2,3,4,5} s1.update({3,4,5,6,7}) s1.update('hello') print(s1)
#去重
#局限性:
#1、不能保证原来的顺序
#2、不能针对可变类型去重
l=[1,1,1,1,'egon','alex','egon',{'x':1}] s=set(l) #{1,'egon','alex'} print(s) l=list(s) #[] print(l) # 需求: #1、列表内的元素有可变类型 #2、去重之后要保持原来顺序 info=[ {'name':'egon','age':18}, {'name':'alex','age':73}, {'name':'egon','age':18}, {'name': 'lxx', 'age': 19}, {'name':'egon','age':18}, {'name':'lxx','age':19}, ] l=[] for dic in info: if dic not in l: l.append(dic) info=l print(info) # 循环 s={'egon','alex','wxx','lxx'} for item in s: print(item)