集合类型
1、作用
作用:集合、list、tuple、dict一样都可以存放多个值。但是集合主要用于:去重、关系运算
1.1关系运算
friends1 = ['zhou', 'sun', 'li', 'hou', 'jia']
friends2 = ['lu', 'sun', 'li', 'yu', 'huo']
l = []
for x in friends1:
if x in friends2:
l.append(x)
print(l)
2、定义
定义: 在{}内用逗号分隔开多个元素,多个元素满足一下三个条件
- 集合内元素必须为不可变类型
- 集合内元素无序
- 集合内元素没有重复
s = {1, 2} # s = set({1,2})
s = {1, [1, 2]} # 集合内元素必须为不可变类型 [1, 2]为可变类型 报错
s = {1, 'a', 'd', 'x', 'q', 5, 2} # 集合内元素无序 {1, 2, 'x', 'a', 5, 'd', 'q'}
s = {1, 1, 1, 1, 34, 'a', 'b'} # 集合内元素没有重复 {1, 34, 'a', 'b'}
了解
s = {} # 默认是空字典
print(type(s))
定义空集合
s = set()
print(s, type(s))
3、类型转换
# set({1, 2, 3})
res = set('hellollll')
print(res) # {'o', 'h', 'l', 'e'}
print(set({'k1': 1, 'k2': 2})) # {'k2', 'k1'}
4、内置方法
4.1 取交集:两者相同的元素
方法一:
friends1 = {'zhou', 'sun', 'li', 'hou', 'jia'}
friends2 = {'lu', 'sun', 'li', 'yu', 'huo'}
res = friends1 & friends2
print(res)
方法二:
friends1 = {'zhou', 'sun', 'li', 'hou', 'jia'}
friends2 = {'lu', 'sun', 'li', 'yu', 'huo'}
print(friends1.intersection(friends2))
注:方法一和方法二相同,方法一是方法二的符号表示
4.2 取并集:两者所有的元素
friends1 = {'zhou', 'sun', 'li', 'hou', 'jia'}
friends2 = {'lu', 'sun', 'li', 'yu', 'huo'}
print(friends1 | friends2)
print(friends1.union(friends2))
4.3取差集:取两个集合中某个集合独有的元素
friends1 = {'zhou', 'sun', 'li', 'hou', 'jia'}
friends2 = {'lu', 'sun', 'li', 'yu', 'huo'}
# 取friends1独有的好友
print(friends1 - friends2)
print(friends1.difference(friends2))
# 取friends2独有的好友
print(friends2 - friends1)
print(friends2.difference(friends1))
4.4 对称差集:求两个集合独有的元素(即去掉共同元素)
friends1 = {'zhou', 'sun', 'li', 'hou', 'jia'}
friends2 = {'lu', 'sun', 'li', 'yu', 'huo'}
print(friends1 ^ friends2)
print(friends1.symmetric_difference(friends2))
4.5 父子集:包含关系
4.5.1 不存在包含关系
s1 = {1, 2, 3}
s2 = {1, 2, 4}
# 不存在包含关系
print(s1 > s2)
print(s1 < s2)
4.5.2 存在包含关系
s1 = {1, 2, 3}
s2 = {1, 2}
print(s1 > s2) # 当s1大于或等于s2时,才能说是s1包含s2
print(s1.issuperset(s2)) # s1>s2 True
print(s2.issubset(s1)) # s2<s1 True
s1 = {1, 2}
s2 = {1, 2}
print(s1 == s2) #互为父子集
print(s1.issuperset(s2)) # True
print(s2.issuperset(s1)) # True
5、去重
5.1 只能针对不可变类型去重
print(set([1, 1, 1, 2, 3, 4]))
5.2 无法保证原来的顺序
l = [1, 'a', 'z', 'b', 1, 2, 4, 2]
s = set(l)
print(s)
l = list(s)
print(l)
5.3 保证原来顺序不变,去除重复信息
l = [
{'name': 'zhoushun', 'age': 18, 'sex': 'male'},
{'name': 'tom', 'age': 17, 'sex': 'male'},
{'name': 'jack', 'age': 20, 'sex': 'male'},
{'name': 'xiaohong', 'age': 24, 'sex': 'female'},
{'name': 'zhoushun', 'age': 18, 'sex': 'male'},
]
# 保证原来顺序不变,去除重复信息
new_l = []
for dic in l:
if dic not in new_l:
new_l.append(dic)
print(new_l)
for d in new_l:
print(d)
6、其他内置方法
6.1 discard()
删除不存在的元素 不报错
s = {1, 2, 3}
s.discard(3)
s.discard(4) # 删除不存在的元素 不报错
print(s) # {1, 2}
6.2 remove()
删除元素不存在则报错
s = {1, 2, 3}
s.remove(4) # 删除元素不存在则报错
6.3 update()
更新并去重
s = {1, 2, 3}
s.update({1, 2, 4, 5, 10, 7})
print(s) # {1, 2, 3, 4, 5, 7, 10} 更新并去重
6.4 pop()
s = {1, 2, 3}
res = s.pop()
print(res) # 1
6.5 add()
s = {1, 2, 3}
s.add(4)
print(s) # {1, 2, 3, 4}