可变集合set()与不可变集合 frozenset()的用法与区别

一、set()函数:可变集合

1.set()定义
>>> s = {1,2,3}
>>> type(s)
<class 'set'>
2.list列表、tuple元组、dict字典、str字符串,均可以转换为set集合
  • 注意:dict字典转为set集合时,只会取key值,value会被舍弃
>>> s = set([1,1,2,2])
>>> s
{1, 2}

>>> s = set((1,1,3,3,2))
>>> s
{1, 2, 3}

>>> s = set({1:2,3:4})
>>> s
{1, 3}

>>> s = set("abcdef")
>>> s
{'b', 'a', 'e', 'c', 'f', 'd'}
3.add()方法:添加元素
  • 整体添加(不能添加list,dict,可以添加tuple、str)
>>> s = {1,2,3}

>>> s.add(1)
>>> s
{1, 2, 3}

>>> s.add(5)
>>> s
{1, 2, 3, 5}

>>> s = {1,2,3}
>>> s.add((3,4,5))
>>> s
{1, 2, 3, (3, 4, 5)}

>>> s.add("abcd")
>>> s
{1, 2, 3, 'abcd', (3, 4, 5)}

>>> s.add([7,8,9])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

>>> s.add({1:2})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'

5.update()方法:---->将元素拆分后,再添加
  • 拆开添加(可以添加list、tuple、dict、str)
>>> s = {1,2,3}
>>> s.update([4,5,6])
>>> s
{1, 2, 3, 4, 5, 6}
>>> s.update({10:20,30:40})
>>> s
{1, 2, 3, 4, 5, 6, 10, 30}
>>> s.update((7,8))
>>> s
{1, 2, 3, 4, 5, 6, 7, 8, 10, 30}
>>> s.update("abcdef")
>>> s
{1, 2, 3, 4, 5, 6, 7, 8, 'b', 10, 'a', 'e', 'c', 'f', 30, 'd'}
>>>
6.remove()方法:删除元素
  • 删除不存在的元素,会报异常
  • 可以用in先判断元素在set里,再进行删除
>>> s = {1,2,3}
>>> s.remove(1)
>>> s
{2, 3}

>>> s.remove(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 5
7.del()方法:删除集合
>>> s = {1,2,3}
>>> s
{1, 2, 3}

>>> del s
>>> s
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 's' is not defined
>>>
8.集合元素遍历
  • 也可以把集合先转成list进行操作,再转回set
>>> s = {1,2,3}
>>> for i in s:
...     print(i)
...
1
2
3
>>>
9.discard()方法:查找元素并删除
  • 删除不存在的元素,也不会报错
  • 没有返回值
>>> a = {1,2,3,4,-1}
>>> a.discard(4)
>>> a
{1, 2, 3, -1}

>>> a.discard(4)
>>> a
{1, 2, 3, -1}

>>> b = a.discard(2)
>>> b
10.pop()方法:弹出一个元素并删除
>>> s = {1,2,3}
>>> s.pop()
1
>>> s
{2, 3}
11.clear()方法:清空集合
>>> s = {1,2,3}
>>> s.clear()
>>> s
set()
>>>
12.copy()方法:复制/备份
  • 两个集合相等,但不是同一个集合
>>> a = {1,2,3}
>>> b = a.copy()
>>> a
{1, 2, 3}

>>> id(a)
2613180691400
>>> b
{1, 2, 3}
>>> id(b)
2613180691624
>>>
13.交集(&)、并集(|)、差集(—)

集合A:1,2,3
集合B:3,4,5

  • A和B的交集:3
  • A和B的并集:1,2,3,4,5
  • a和B的差集:1,2
  • b和a的差集:4,5
>>> a = {1,2,3}
>>> b = {3,4,5}
>>> a&b
{3}

>>> a|b
{1, 2, 3, 4, 5}

>>> a-b
{1, 2}

>>> b-a
{4, 5}
14.difference(与差集效果一样)
>>> s1=set([1,2,3])
>>> s==set([3,4,5])
>>> s2=set([3,4,5])
>>> s1.difference(s2)
{1, 2}
>>> s1-s2
{1, 2}
15.包含关系(大于号表示)
>>> s1={1,2,5}
>>> s2={1,2,3}
>>> s1>s2
False
>>> s2>s1
False
16.判断是否相等
>>> s1 = {1,2,3}
>>> s2 = {1,2,3}
>>> s1 == s2
True
17.超级和子集()
  • issuperset() ----》和大于号功能类似
  • issubset() ----》和小于号功能类似
>>> s1 = {1,2}
>>> s2 = {1,2,3}
>>> s2.issuperset(s1)
True
>>> s1.issubset(s2)
True

>>> s2 > s1
True
>>> s1 < s2
True

二、frozenset()函数:不可变集合

  • 没有add、update方法
>>> frozenset([1,2,3,2,3,4])
frozenset({1, 2, 3, 4})

>>> frozenset({1:2,3:4})
frozenset({1, 3})
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值