集合
集合是可变的数据类型
元素必须是不可变的数据类型
特征:
无序、不重复
一、创建
1)正确方式
set1 = set({1,2,3,4})
print(set1)
2)错误方式
set2 = {1,2,3,[2,3],{'name':'alex'}} # 报错
二、增加
1)set.add(要添加的元素)
注意这个添加的元素必须是不可变数据类型
set1 = {'pyrookie','pipijiang'}
set1.add('女神')
print(set1)
{'pipijiang', '女神', 'pyrookie'}
2)set.update(iterable)
注意传入的参数必须是可迭代对象
类似于列表的extend的增加
set1 = {'pyrookie','pipijiang'}
set1.update('abc') #类似与extend的增加
print(set1)
{'pyrookie', 'pipijiang', 'c', 'a', 'b'}
三、删除
1)随机删除 set.pop()
随机删除,并返回删除的内容
set1 = {'b', 'a', 'pipijiang', 'pyrookie', 'c', '女神'}
print(set1.pop()) # 随机删除 并返回删除的内容
print(set1)
pipijiang
{'c', 'pyrookie', 'a', '女神', 'b'}
2)指定元素删除 set.remove(member)
指定元素删除,如果删除的元素不是集合中的元素会报错
set1 = { 'pipijiang', 'pyrookie', '女神'}
set1.remove('女神')
print(set1)
{'pipijiang', 'pyrookie'}
3)清空 clear()
将集合清空,只保留一个空集合
set1 = { 'pipijiang', 'pyrookie','女神'}
set1.clear()
print(set1)
set()
4)del set
从内存中删除
set1 = {1,2,3}
del set1
print(set1)
NameError: name 'set1' is not defined
四、改
没有改这个功能,因为集合的元素都是不可变数据类型
五、查
无序,只能for in 遍历查看集合中的元素
六、集合的特殊功能
1)交集 & set1.intersection(set2)
# 返回一个交集集合
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2)
print(set1.intersection(set2))
{4, 5}
{4, 5}
2)并集 | set1.union(set2)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2)
print(set1.union(set2))
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3, 4, 5, 6, 7, 8}
3)反交集
就是对于set1 来说 独有的
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)
print(set1.difference(set2))
{1, 2, 3}
{1, 2, 3}
4)子集 和 超集
1、 子集 < set1.issubset(set2)
set1 = {1,2,3}
set2 = {1,2,3,4,5,6,7,8}
print(set1 < set2) #这两个相同,都是说明set1 是set2 的子集,set2 是 set1 的超集
print(set1.issubset(set2))
True
True
2、 超集 > set1.issubset(set2)
set1 = {1,2,3}
set2 = {1,2,3,4,5,6,7,8}
print(set2 > set1) ##这两个相同,都是说明set1 是set2 的子集,set2 是 set1 的超集
print(set2.issuperset(set1))
True
True
七、主要功能:去重
对列表中的元素去重
li = [1,2,3,4,5,6,5,1,2]
set1 = set(li)
li = list(set1)
print(li)
[1, 2, 3, 4, 5, 6]
八、将集合转变为不可变数据类型
转换后的数据类型
1、无重复
2、没有集合的添加和删除方法
s = frozenset('barry')
print(s, type(s))
frozenset({'b', 'r', 'y', 'a'}) <class 'frozenset'>