Python数据容器总结(集合部分)

一、集合的存储特点

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

1、集合是去重的!其中不能包含重复的元素。

2、集合是无序的!元素添加的顺序和存储的顺序不一致。(即:无法使用下标来访问元素)

集合的创建

# 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)

二、集合的运算符

运算符描述示例
&

求交集,两个集合中都包含的元素。将结果保存在一个新的集合中返回。

{1, 2, 3} & {2, 3, 4}

|

求并集,两个集合中包含的所有元素。将结果保存在一个新的集合中返回。

{1, 2, 3} | {2, 3, 4}

-

求差集,左边集合包含,但是右边集合不包含的元素(左边的集合-交集)。将结果保存在一个新的集合中返回。

{1, 2, 3} - {2, 3, 4}

^

求对称集,并集 - 交集。将结果保存在一个新的集合中返回。

{1, 2, 3} ^ {2, 3, 4}

&=

计算交集,修改左边的集合。

s1 = {1, 2, 3}

s1 &= {2, 3, 4}

|=

计算并集,修改左边的集合。

s1 = {1, 2, 3}

s1 |= {2, 3, 4}

-=

计算差集,修改左边的集合。

s1 = {1, 2, 3}

s1 -= {2, 3, 4}

^=

计算对称集,修改左边的集合。

s1 = {1, 2, 3}

s1 ^= {2, 3, 4}

>

判断右边的集合,是否是左边集合的真子集。

{1, 2, 3, 4} > {1, 2, 3}

>=

判断右边的集合,是否是左边集合的子集。

{1, 2, 3, 4} >= {1, 2, 3}

<

判断左边的集合,是否是右边集合的真子集。

{1, 2, 3, 4} < {1, 2, 3}

<=

判断左边的集合,是否是右边集合的子集。

{1, 2, 3, 4} <= {1, 2, 3}

==

判断两个集合的元素是否相同。

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

!=

判断两个集合的元素是否不同。

{1, 2, 3, 4} != {1, 2, 3}

in

判断元素是否在指定的集合中包含。

1 in {1, 2, 3}

not in

判断元素是否在指定的集合中不包含。

1 not in {1, 2, 3}

子集: 如果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)      # 判断是否包含

集合的操作

函数描述示例
add

添加元素

s1 = {}

s1.add(1)

remobe

删除元素

如果要删除的元素不存在,报错

s1 = {1, 2, 3}

s1.remove(2)

discard

删除元素

如果要删除的元素不存在,不报错

s1 = {1, 2, 3}

s1.discard(2)

clear

清空集合

s1 = {1, 2, 3}

s1.clear()

isdisjoint

判断两个集合是否不存在交集

s1 = {1, 2, 3}

s2 = {4, 5, 6}

s1.isdisjoint(s2)

copy

拷贝一个集合

s1 = {1, 2, 3}

s1.copy()

# 创建一个集合
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)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值