集合:是一个无序的、不重复的元素序列
- 集合中的元素是不可变的类型,所以可以是数字,字符串和元组,但不能是列表和字典,因为它们是可变的
- 集合中的元素是无序且不重复的
- 将元素放在{}中,各元素间用逗号隔开
- 创建空集合使用set(),不能用{},{}是空字典
- 集合只是用例处理列表或元组的一种临时类型,不适合存储与传输
与列表的区别:
- 列表是有序的,集合是无序的
- 列表内容可重复,集合内容不可重复
- 列表有索引,集合没有索引
- 列表使用[],集合使用{}
- 列表用于数据的使用,集合用于数据的交集并集差集的获取
1.去重,集合中有重复元素时会自动去重
例:
a = {1, 'zz', 2, 3, 2, '11', 2}
print("集合是不重复且无序的:",a)
# 若是要对列表去重,可以将其转化成集合再转化成列表即可
b = [1, 1, 2, 3, 2]
print("列表去重前:",b)
b_set = set(b) # 将列表转化成集合
b_list = list(b_set) # 将集合转化成列表
print("列表去重后:",b_list)
结果:
2.运算符in,判断集合中是否包含有某个元素
- in:集合中是否包含某元素,包含返回True,否则返回False
- not in:集合中是否不包含某元素,不包含返回True,否则返回False
例:
a = {1, 'zz', 2, 3, 2, '11', 2}
b1 = 1 in a
b2 = 1 not in a
print("集合中是否包含元素1:",b1)
print("集合中是否不包含元素1:",b2)
结果:
3.迭代输入集合中的内容
例:
a = {666, 'zz', '111', 666}
# 迭代输出集合a中的元素,集合是不重复的所以打印出的是不重复的元素
for i in a:
print(i)
# 迭代输出集合a中的元素和索引值,使用函数enumerate
for i,j in enumerate(a):
print(f'索引值:{i},元素为:{j}')
结果:
4.对集合进行添加和删除操作
- add函数:集合中添加一个元素,若集合中已存在该元素,则该函数不执行;用法:set.add(item),item是要添加的元素,无返回值
- update函数:加入一个新的集合(或列表,元组,字符串),若辛几何中的元素在原集合中存在则无视;用法:set.update(iterable),iterable是集合、列表、元组、字符串;无返回值,直接作用与原集合
- remove函数:将集合中某个元素删除,若元素不存在会报错;用法:set.remove(item),item是一个元素,无返回值,直接作用于集合
- clear函数:清空当前函数所有数据;用法:set.clear(),无需传参,无返回值
- del 函数:删除字典
- pop函数:删除集合中第一个元素;用法:set.pop(),无需传参
例:
a = {1}
print("操作集合之前:",a)
# add,添加一个元素,可以添加已有的,但是没有效果
a.add('aaa')
a.add(1)
print("第一次集合中添加元素后:",a)
# update,添加多个元素,会将集合,元组,列表,字符串拆开,然后再插入集合中
a.update(['1', '2'])
a.update(('3', '4'))
a.update('我是')
print("第二次集合中添加元素后:",a)
# remove,删除指定的元素“aaa”
a.remove('aaa')
print("删除元素元素“aaa”后:",a)
# pop,删除第一个元素
a.pop()
print("删除第一个元素后:",a)
结果:
5.集合的运算
- 交集:2个或多个集合中都有的元素,a_set.intersection(b_set…),可以传多个参数
- 并集:2个或多个集合中所有元素(集合中元素不重复),a_set.union(b_set…),可以传多个参数
- 差集:a集合中有b集合中没有的元素,a_set.difference(b_set)
- 交叉补集:并集减去交集,a_set.symmetric_difference(b_set)
- 超集:若b中包含有a中所有的元素,则b是a的超集,a_set.issubset(b_set)
例:
a = {1, 2, 'ha'}
b = {2, 5, 9}
print("集合a:",a)
print("集合b:",b)
# 交集,取2个集合中都有的元素,有2种方法
jiao_1 = a & b
jiao_2 = a.intersection(b)
print("集合a与b的交集:",jiao_1)
print("集合a与b的交集:",jiao_2)
# 并集,取2个集合中所有元素,有2种方法
bing_1 = a | b
bing_2 = a.union(b)
print("集合a与b的并集:",bing_1)
print("集合a与b的并集:",bing_2)
# 差集,集合a减去集合b,即a有但是b没有的元素,有2种方法
cha_1 = a.difference(b)
cha_2 = a - b
print("集合a与b的差集:",cha_1)
print("集合a与b的差集:",cha_2)
# 交叉补集,并集减去交集,即2个集合中独有的元素,有2种方法
bu_1 = a.symmetric_difference(b)
bu_2 = a ^ b
print("集合a与b的交叉补集:",bu_1)
print("集合a与b的交叉补集",bu_2)
# 超集,若是b中包含有a全部的元素,则b是a的超集,返回True
chao = a.issubset(b)
print("集合b是a的超集:",chao)
结果:
6.isdisjoint函数:判断2个集合中是否包含相同的元素,若没有返回True,否则返回False
用法:
- a_set.isdisjoint(b_set),返回一个布尔值
例:
a = {1, 2, 'a'}
b = {'1', 'a'}
c = {(1, 2)}
print('a字典:{}'.format(a))
print('b字典:{}'.format(b))
print('c字典:{}'.format(c))
print('a与b没有相同元素:{}'.format(a.isdisjoint(b)))
print('a与c没有相同元素:{}'.format(a.isdisjoint(c)))
结果: