一、集合类型
1.基本使用
(1)用途:关系运算、去重
(2)定义方式:{}内用逗号分开多个元素,每一个元素都必须是不可变(即可hash)类型
⭐⭐⭐强调:
a.集合内的元素都必须是不可变(即可hash)类型
b.集合内的元素是无序的,并不能通过索引来取值
c.集合内的元素不能重复(可理解为集合内无重复的元素)
s={1,3,"hello","sun"} #s=set({1,3,"hello","sun"}) print(type(s))
2.单纯的用集合去重,需要注意的问题是⭐⭐⭐
(1)去重的目标所包含的值必须都是为不可变类型
(2)去重的结果会打乱原来的顺序
(如:列表若不想打乱顺序,可以使用for循环+append的方法来把值从列表中取出,并放入新的列表中)
names=["Namy","Brooke","Sauro","Luffy","Luffy","Brooke"] s=set(names) names=list(s) print(names) #如列表的去重 l=["sun","sun","cake","hello","sunday","hello"] new_l=[] #新建空列表 for item in list: if item not in new_l: new_l.append(item)
3.常用操作和内置方法
3.1优先掌握的操作
3.1.1 长度len
print(len(names))
3.1.2 成员运算in和not in
names=("Luffy","Brooke") print("Luffy" in names)
⭐⭐⭐重点:
① 当没有集合的时候,取出两个列表中都有的或者不同元素的方法:
names1=["Luffy","Namy","Brooke","Sauro","Boss","Boost"] names2=["Luffy","Brooke","Boss","Sun","Moon"] list=[] #定义一个空列表 for name in names1: #循环取出names1中的元素 #如果需要不同元素则直接用not in if name in names2: #判断names2中是否有同样的元素 list.append(name) #有的话就把该元素加入新列表当中 print(list)
② 有集合之后的操作方法:
names1={"Luffy","Namy","Brooke","Sauro","Boss","Boost"} names2={"Luffy","Brooke","Boss","Sun","Moon"} | 并集 #前后顺序改变没有任何影响 print(names1|names2) print(names1.union(names2)) & 交集 #前后顺序改变没有任何影响 print(names1&names2) print(names1.intersection(names2)) - 差集 #前后位置对调,结果不同 print(names1-names2) print(names2-names1) print(names1.difference(names2)) print(names2.difference(names1)) ^ 对称差集 #前后顺序改变不会改变结果 print(names1^names2) print(names2^names1) print(names1.symmetric_difference(names2)) == print(names1==names2) #False >,>= 父集 print(names1>names2) #False (names1包含names2) print(names1.issuperset(names2)) <,<= 子集(被包含的关系) print(names2<names1) #True
4.该类型总结
(1)存一个值或者多个值
可以存多个值,但是值必须都是不可变类型
(2)有序或者无序
集合是无序的
(3)可变或者不可变
set集合是可变类型
s={1,2,3} print(id(s)) s.add(4) print(s) print(id(s))
5.集合的去重
⭐⭐⭐单纯的用集合去重,需要注意的问题是
(1)去重的目标所包含的值必须都是不可变类型
(2)去重的结果会打乱原来的顺序
stu_info=[ {'name':'namy','age':18,'sex':'female'}, {'name':'luffy','age':18,'sex':'male'}, {'name':'luffy','age':18,'sex':'male'}, {'name':'brooke','age':999,'sex':'male'}, {'name':'brooke','age':999,'sex':'female'}, ] new_list=[] for info in stu_info: if info not in new_list: new_info.append(info) print(new_info)