c++ set 删除子集_初学者Python学习笔记--集合set

什么是集合set?

集合(set)是一个无序的不重复元素序列。基本功能包括关系测试和消除重复元素。集合成员可以做字典中的键。

因为集合对象是一组无序排列的可哈希的值,所以不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。

集合可以看做没有value的字典的key集合,由于字典的key是不重复的,且key是不可变对象因此set也有特性:

  • 不重复
  • 元素为不可变对象

为什么用集合set?

集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算。

利用集合的特性可以测试关系和消除重复元素。

如何使用集合?

创建集合

可以使用大括号{ }或者set()函数创建集合,注意:创建一个空集合必须用set()而不是{ },因为{ }是用来创建一个空字典。

>>> set1 = {1,2,3}
>>> type(set1)
<class 'set'>

>>> set2 = set('abc')
>>> set2
{'c', 'b', 'a'}

>>> set3 = set([1,2,3,'a'])
>>> set3
{1, 2, 3, 'a'}

# 创建空集合不能用{},这样创建出的是空字典
>>> s = {}
>>> type(s)
<class 'dict'>
# 创建空集合用set()
>>> s = set()
>>> type(s)
<class 'set'>

集合的增删

添加元素

# 增加1项元素 set().add()
>>> set1 = set((1,2,3,4))
>>> set1
{1, 2, 3, 4}
>>> set1.add(5)
>>> set1
{1, 2, 3, 4, 5}
# 增加多项元素 set().update()
>>> set2 = {1,2,3}
>>> set2.update(['a','b'])
>>> set2
{1, 2, 3, 'a', 'b'}

>>> set3 = {4,5,6}
>>> a = {'a':1,'b':2}
>>> set3.update(a)
>>> set3
{4, 5, 6, 'b', 'a'}  # 增加元素是字典的话,只会添加字典的key

>>> set4 = {1,2,3}
>>> set4.update((4,5,6))  # 元组的表现同列表
>>> set4
{1, 2, 3, 4, 5, 6}


# 列表不能hash,所以不能添加进集合,字典和集合本身也不行哦!
>>> set1 = set((1,2,3,4))
>>> set1
{1, 2, 3, 4}
>>> set1.add([5,6])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

元组可以hash,所以可以添加进集合
>>> hash((5,6))
3713085962043070856
>>> set1 = set((1,2,3,4))
>>> set1
{1, 2, 3, 4}
>>> set1.add((5,6))
>>> set1
{1, 2, 3, 4, (5, 6)}

# 复制一个集合 set().copy()
>>> s = {5,6,7}
>>> t = s.copy()
>>> t
{5, 6, 7}

移除元素

# 删除元素 set().remove()
>>> set1 = {1,2,3}
>>> set1
{1, 2, 3}
>>> set1.remove(1)
>>> set1
{2, 3}

# 删除元素 set().discard()
>>> set1 = {1,2,3}
>>> set1
{1, 2, 3}
>>> set1.discard(3)
>>> set1
{1, 2}

# remove和discard区别:remove删除一个不存在于集合中的元素是会报错,discard不会。
>>> set1 = {1,2,3}
>>> set1.remove(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 4
>>> set1.discard(4)
>>>

# 排序后删除集合中的一个元素 set().pop()
# 集合会对元素进行排列,pop方法将这个排列集合的左面第一个元素进行删除。
>>> set1 = {4,3,0,1,2}
>>> set1
{0, 1, 2, 3, 4}
>>> set1.pop()
0
>>> set1.pop()
1
>>> set1
{2, 3, 4}

>>> set1 = {1,3,0,'A','a','c','b'}
>>> set1
{0, 1, 3, 'A', 'a', 'c', 'b'}
>>> set1.pop()
0
>>> set1.pop()
1
>>> set1.pop()
3
>>> set1.pop()
'A'
>>> set1
{'a', 'c', 'b'}

# 清空集合 set().clear()
>>> set1
{'a', 'c', 'b'}
>>> set1.clear()
>>> set1
set()

集合的一些操作和计算

>>> s = {1,2,3,4,5}
>>> t = {1,3,5}

# 集合的长度
>>> len(s)
5

# 并集、交集、差集和对称差集
# s和t的并集
>>> s | t  
{1, 2, 3, 4, 5}
>>> s.union(t)
{1, 2, 3, 4, 5}
>>> t |= s  #t和s的并集,并直接赋值给t
>>> t
{1, 2, 3, 4, 5}


# s和t的交集
>>> s & t
{1, 3, 5}
>>> s.intersection(t)
{1, 3, 5}
>>> s &= t  #s和t的交集并直接赋值给s
>>> s
{1, 3, 5}


# s和t的差集
>>> s - t  # 在s中,但不在t中。
{2, 4}   
>>> s.difference(t)
{2, 4}
>>> s -= t  #s和t的差集,直接赋值给s
>>> s
{2, 4}

# s和t的对称差集
>>> s ^ t  # 在s或t中,但不会同时出现在二者中
{2, 4}
>>> s.symmetric_difference(t)
{2, 4}
>>> s ^= t  # s和t的对称差集,直接赋值给s
>>> s
{2, 4}

# 子集判断
>>> s <= t  # 判断s是否为t的子集,s中的元素是否都在t中
False
>>> t <= s  # 判断t是否为s的子集,t中的元素是否都在s中
True
>>> t.issubset(s)
True

# 全集判断
>>> s >= t  # 判断s是否是t的全集,s包含t的所有元素
True
>>> s.issuperset(t)
True

其他操作,用做多的就是去重和排序

# 去重排序
>>> s = [1,2,3,4,5,2,3,2,1]
>>> set(s)
{1, 2, 3, 4, 5}

>>> set('ccooppyy')
{'c', 'o', 'y', 'p'}

可以去阿里云开一个云主机,做做练习哦~

优惠上云,来阿里云·云小站​www.aliyun.com
319d90ebb2d5dd577e73ec12ee358b25.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值