集合2:方法和运算符—适用set/frozenset(上)

本文详细介绍了Python中set对象的浅拷贝方法s.copy(),判断不相交isdisjoint(),以及子集(issubset(), <=)和超集(issuperset(), >=)的概念及其使用。通过实例演示了如何检查集合之间的包含关系和比较操作。
摘要由CSDN通过智能技术生成

目录

1. s.copy()

2. s.isdisjoint(other)

3. 子集

3.1 s.issubset(other)

3.2 set <= other

3.3 set < other

4. 超集

4.1 s.issuperset(other)

4.2 set >= other

4.3 set > other


不改变原集合的方法,同时适用于set、frozenset对象,包括如下方法以及等价运算符:

1. s.copy()

返回 s 集合的一个浅拷贝

s = {1.1, 257, ('a',), 4, 5}
s = {1.1, 257, ('a','b','c')}
s1 = s.copy()
for x in s:
...     for x1 in s1:
...         if x == x1:
...             print(x)
...             if x is x1:
...                 print('x和x1是同一元素')
...                 
1.1
x和x1是同一元素
('a', 'b', 'c')
x和x1是同一元素
257
x和x1是同一元素

2. s.isdisjoint(other)

如果 s 集合中没有与 other 容器存在共同的元素,那么返回 True,否则返回 False;

当且仅当两个集合的交集为空集合时,两者为不相交集合;

other可以不是集合,还可以是列表、元组、字典、字符串;

列表、元组元素的子元素与集合中元素相同,仍不相交;

字典则判断其键是否与集合元素相交。

s1 = {1,'2',3.4,5j}

#如果 s 集合中没有与 other 容器存在共同的元素,那么返回 True,否则返回 False
s8 = {5j,6j,7j}
s1.isdisjoint(s8)
False
s9 = {'1',2}
s1.isdisjoint(s9)
True

#other可以是字典,判断其键是否与集合元素相交
s2 = {1:'x'}
s1.isdisjoint(s2)
False
s3 = {'x':1}
s1.isdisjoint(s3)
True

#other可以是列表
s4 = ['a','2','b']
s1.isdisjoint(s4)
False

#other可以是元组
s5 = (3.4,'c','d')
s1.isdisjoint(s5)
False

#列表、元组元素的子元素与集合中元素相同,仍不想交;
s6 = [(0,1),4,5]
s1.isdisjoint(s6)
True

#other可以是字符串
s7 = '123'
s1.isdisjoint(s7)
False

3. 子集

3.1 s.issubset(other)

如果 s 集合是 other 容器的子集,那么返回 True,否则返回 False;

对于两个集合 A、B,如果集合 A 中任意一个元素都是集合 B 中的元素,我们就说这两个集合有包含关系,称集合 A 为集合 B 的子集(Subset);

other可以是列表、元组、字典、字符串等,字典是判断s集合是否是字典键的子集;

集合A==集合B,A是B的子集,但不是B的真子集。

s1 = {1,2,3,4}

#s 集合是 other 容器的子集,返回 True
s2 = {1,2,3,4}
s1.issubset(s2)
True
s3 = {1,2,3,4,5}
s1.issubset(s3)
True

#s 集合不是 other 容器的子集,返回 False
s4 = {2,3,4}
s1.issubset(s4)
False

#other 可以是元组、列表、字典、字符串等
s5 = [1,2,3,4,5]
s1.issubset(s5)
True
s6 = (1,2,3,4)
s1.issubset(s6)
True
s7 = {1:'a',2:'b',3:'c',4:'d'}
s1.issubset(s7)
True
s8 = {'1','2','3'}
s9 = '1234'
s8.issubset(s9)
True

3.2 set <= other

检测是否集合中的每个元素都在 other 之中,集合之间对比时,等价于s.issubset();

运算符比较,other必须为集合,不支持列表、元组、字典、字符串等可迭代对象。

s1 = {1,2,3,4}

#集合中的每个元素都在 other 之中,返回True
s2 = {1,2,3,4,5}
s1 <= s2
True
s3 = {1,2,3,4}
s1 <= s3
True

#集合中有元素不在other之中,返回False
s4 = {1,2,3}
s1 <= s4
False

#运算符比较,other必须为集合,不支持列表、元组、字典、字符串等可迭代对象
s5 = [1,2,3,4,5]
s1 <= s5
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: '<=' not supported between instances of 'set' and 'list'

3.3 set < other

检测集合是否为 other 的真子集,即 set <= other and set != other。

s1 = {1,2,3,4}

#集合中的每个元素都在 other 之中,且set != other,返回True
s2 = {1,2,3,4,5}
s1 < s2
True

#set == other,返回False
s3 = {1,2,3,4}
s1 < s3
False

#集合中有元素不在other之中,返回False
s4 = {1,2,3}
s1 < s4
False

4. 超集

4.1 s.issuperset(other)

如果 s 集合是 other 容器的超集,那么返回 True,否则返回 False;

对于两个集合 A、B,如果集合 B 中任意一个元素都是集合 A 中的元素,我们就说这两个集合有包含关系,称集合 A 为集合 B 的超集(Superset);

other可以是列表、元组、字典、字符串等,字典是判断s集合是否是字典键的子集;

集合A==集合B,A是B的超集,但不是B的真超集。

s1 = {1,2,3,4}

# s 集合不是 other 容器的超集,返回 False
s2 = {1,2,3,4,5}
s1.issuperset(s2)
False

# s 集合是 other 容器的超集,返回 True
s3 = {1,2,3,4}
s1.issuperset(s3)
True
s4 = {1,2,3}
s1.issuperset(s4)
True

#other 可以是元组、列表、字典、字符串等
s5 = [1,2,3,4]
s1.issuperset(s5)
True
s6 = (1,2,3)
s1.issuperset(s6)
True
s7 = {1:'a',2:'b',3:'c',4:'d'}
s1.issuperset(s7)
True
s8 = {'1','2','3','4'}
s9 = '123'
s8.issuperset(s9)
True

4.2 set >= other

检测是否 other 中的每个元素都在集合之中,集合之间对比时,等价于s.issuperset()

运算符比较,other必须为集合,不支持列表、元组、字典、字符串等可迭代对象。

s1 = {1,2,3,4}

# other 中存在不在集合中的元素,返回 True
s2 = {1,2,3,4,5}
s1 >= s2
False

# other 中的每个元素都在集合之中,返回 True
s3 = {1,2,3,4}
s1 >= s3
True
s4 = {1,2,3}
s1 >= s4
True

#运算符比较,other必须为集合,不支持列表、元组、字典、字符串等可迭代对象
s5 = [1,2,3,4]
s1 >= s5
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: '>=' not supported between instances of 'set' and 'list'

4.3 set > other

检测集合是否为 other 的真超集,即 set >= other and set != other。

s1 = {1,2,3,4}

# other 中存在不在集合中的元素,返回 False
s2 = {1,2,3,4,5}
s1 > s2
False

#set == other,返回 False
s3 = {1,2,3,4}
s1 > s3
False

# other 中的每个元素都在集合之中,且set != other,返回 True
s4 = {1,2,3}
s1 > s4
True
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燃烧的火鸟啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值