set(集合)
由一个或多个确定的元素所构成的整体,称为集合,集合中的东西称为元素
集合的特点是 :
- 确定性 【要么在集合中 要么不在】
- 唯一性 【集合中的元素是唯一的 不重复的】
- 无序性
集合是可变的无序序列
1. 集合的定义
- 使用字面量
{}
定义法 【不能定义空集合】- 使用
set()
进行构造
# 1. 字面量方式
s = {18, 27, 33, 56, 41}
print(type(s), s) # <class 'set'> {33, 41, 18, 56, 27}
# 2. set构造
# 定义空集合的唯一方式
s0 = set()
print(s0) # set()
# 将其他序列转换成集合 顺便对元素去重
s1 = set('hello')
print(s1) # {'l', 'h', 'e', 'o'}
2. 集合的运算符
"""
& 交集 把数据存储在一个新的集合中
| 并集 把数据存储在一个新的集合中
^ 对称差 把数据存储在一个新的集合中
- 差集 把数据存储在一个新的集合中
&= 交集 修改前者
|= 并集 修改前者
^= 对称差 修改前者
-= 差集 修改前者
> 判断后者是否为前者的真子集
>= 判断后者是否为前者的子集
< 判断前者是否为后者的真子集
<= 判断前者是否为后者的子集
== 判断两个集合数据是否一样
!= 判断两个集合数据是否不一样
in 判断元素是否包含在集合中
not in 判断元素是否不包含在集合中
id 获取地址
is 判断地址是否一致
not is 判断地址是否不止一致
"""
s1 = {19, 22, 38, 41, 56, 27}
s2 = {22, 41, 56, 33, 29, 45}
# 交集
new_s = s1 & s2
print(new_s, s1, s2)
# {56, 41, 22} {38, 41, 19, 22, 56, 27} {33, 41, 45, 22, 56, 29}
# 并集
new_s = s1 | s2
print(new_s, s1, s2)
# {33, 38, 41, 45, 19, 22, 56, 27, 29} {38, 41, 19, 22, 56, 27} {33, 41, 45, 22, 56, 29}
# 差集
new_s = s1 - s2
print(new_s, s1, s2)
# {27, 19, 38} {38, 41, 19, 22, 56, 27} {33, 41, 45, 22, 56, 29}
# 对称差
new_s = s1 ^ s2 # 并集 - 交集
print(new_s, s1, s2)
# {33, 38, 45, 19, 27, 29} {38, 41, 19, 22, 56, 27} {33, 41, 45, 22, 56, 29}
s1 &= s2
print(s1, s2) # {56, 41, 22} {33, 41, 45, 22, 56, 29}
# 判断的操作
s3 = {19, 22, 45, 67, 82}
print(s3 > {22, 45, 67, 19, 82}) # False
print(s3 >= {22, 45, 67, 19, 82}) # True
print({67, 22} < s3) # True
print(s3 == {22, 45, 67, 19, 82}) # True
print(s3 != {22, 45, 67, 19, 82}) # False
print(19 in s3) # True
3. 集合的操作【了解】
有一些操作与集合的运算符是对应的
s1 = {13, 27, 38}
# 添加元素
s1.add(38)
print(s1) # 元素存在 不做响应
s1.add(19)
print(s1) # {19, 27, 13, 38}
# 移除
s1.remove(27) # 不是成员 会报错
print(s1)
s1.discard(27) # 不是成员 不做响应
print(s1)
# s1.clear() # 清空
# 拷贝集合
s2 = s1.copy()
print(s2)
# 判断两个集合是否不存在交集
print({12, 34}.isdisjoint({77, 82})) # True
print({12, 34}.isdisjoint({77, 82, 12})) # False
# 因为集合没有索引,所以只能使用追简单的for循环操作
for ele in s1:
print(ele)
4. 不可变集合(frozenset)
frozenset
与set
的关系 和tuple
与list
的关系差不多
# 构造定义不可变集合 【把其他序列转变成不可变集合】
fs = frozenset({12, 34, 56, 7})
print(fs)
fs1 = frozenset([33, 56, 27, 15])
print(fs1)
print(fs & fs1) # frozenset({56})
总结:
集合:可以容纳多个数据、可以容纳不同类型的数据(混装)、数据是无序存储的(不支持下标索引)、不允许重复数据存在、可以修改(增加或删除元素等)、支持for循环