Python数据容器总结---集合部分

文章介绍了Python中的集合(Set)数据类型,包括其去重和无序的特点,创建集合的三种方法,以及集合的运算(交集、并集、差集、对称差)。此外,还讨论了集合的子集与真子集概念,提供了相关操作示例,如元素的添加、删除和遍历,以及不可变集合frozenset的使用。

集合的存储特点

集合是一个容器,最大的特点在于:

  • 集合是去重的!其中不能包含重复的元素。
  • 集合是无序的!元素添加的顺序和存储的顺序不一致。(即:无法使用下标来访问元素)

集合的创建

# 1. 通过字面量,创建一个set
set1 = {1, 2, 3, 4, 5}
print(type(set1), set1)

#    set集合中,不允许包含重复的元素
set2 = {1, 2, 2, 3, 3, 4, 4, 5}
print(type(set2), set2)

#    set集合中存储的数据是无序的(元素添加的顺序和存储的顺序是不一致的)
#    但是注意:这里的无序,不代表随机!
set3 = {"李云龙", "二营长", "意大利炮", "云飞兄"}
print(type(set3), set3)


# 2. 通过set()函数,可以将其他的容器,转成set
set4 = set("hello world")
print(type(set4), set4)


# 3. 注意事项:无法通过 {} 创建一个空集合,如果要创建空集合,只能使用 set()
set5 = {}
print(type(set5), set5)

集合的运算符

 

 

 

子集: 如果B集合中的所有元素都在A集合中包含,那么B就是A的子集

真子集: 如果A除了包含B集合中所有的元素之外,还有其他的元素,那么B就是A的真子集

"""
&   交集 把数据存储在一个新的集合中
|   并集 把数据存储在一个新的集合中
^   对称差 把数据存储在一个新的集合中
-   差集 把数据存储在一个新的集合中

&= 交集  修改前者
|= 并集  修改前者
^= 对称差  修改前者
-= 差集  修改前者

子集: 如果B集合中的所有元素都在A集合中包含,那么B就是A的子集
真子集: 如果A除了包含B集合中所有的元素之外,还有其他的元素,那么B就是A的真子集

>   判断后者是否为前者的真子集
>=  判断后者是否为前者的子集
<   判断前者是否为后者的真子集
<=  判断前者是否为后者的子集
==  判断两个集合数据是否一样
!=  判断两个集合数据是否不一样

in  判断元素是否包含在集合中
not in  判断元素是否不包含在集合中
id 获取地址
is 判断地址是否一致
not is 判断地址是否不止一致
"""

s1 = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}

print(s1 & s2)      # 3, 4, 5
print(s1 | s2)      # 1, 2, 3, 4, 5, 6, 7
print(s1 - s2)      # 1, 2
print(s1 ^ s2)      # 1, 2, 6, 7

s3 = {1, 2, 3, 4, 5}
s4 = {2, 3, 4, 5}

print(s3 > s4)      # 判断是否是真子集
print(s3 >= s4)     # 判断是否是子集

print(s3 == s4)     # 判断两个集合中的元素是否相同

print(3 in s3)      # 判断是否包含

集合的操作

 

# 创建一个集合
set1 = {1, 2, 3, 4, 5}

# 添加元素
set1.add(6)

# 删除元素
# remove函数,在删除的时候,如果集合中不包含这个元素,删除会报错
set1.remove(5)
# discard函数,在删除的时候,如果集合中不包含这个元素,没有任何反应
set1.discard(5)

# 清空集合
# set1.clear()

# 判断两个集合,是否没有交集
print(set1.isdisjoint({7, 8, 9, 0}))

# 深拷贝
set1.copy()
print(set1)

集合的遍历

因为集合中没有下标的概念,因此对于集合的遍历,只有一种方式:

s1 = {1, 2, 3, 4, 5}

for n in s1:
    print(n)

不可变集合

frozenset: 表示不可变集合,类似于tuple,不可以修改集合中的元素,不可以增加、删除元素

# 不可变集合,与集合的关系,类似于tuple和list
s1 = frozenset({1, 2, 3, 4, 5})
print(type(s1), s1)

s2 = frozenset([3, 4, 5, 6, 7])
print(type(s2), s2)

print(s1 & s2)
print(s1 | s2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值