第五章 Python数据容器 05-set容器

set(集合)

由一个或多个确定的元素所构成的整体,称为集合,集合中的东西称为元素

集合的特点是 :

  1. 确定性 【要么在集合中 要么不在】
  2. 唯一性 【集合中的元素是唯一的 不重复的】
  3. 无序性

集合是可变的无序序列

1. 集合的定义

  1. 使用字面量{}定义法 【不能定义空集合】
  2. 使用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)

frozensetset的关系 和 tuplelist的关系差不多

# 构造定义不可变集合 【把其他序列转变成不可变集合】
fs = frozenset({12, 34, 56, 7})
print(fs)

fs1 = frozenset([33, 56, 27, 15])
print(fs1)

print(fs & fs1)  # frozenset({56})

总结:

集合:可以容纳多个数据、可以容纳不同类型的数据(混装)、数据是无序存储的(不支持下标索引)、不允许重复数据存在、可以修改(增加或删除元素等)、支持for循环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值