Python学习笔记--集合及常用操作

定义与初始化

  • 数学意义上的集合
  • 没有重复元素

例子:

>>> s = set()
>>> s
set()
>>> s = {1, 2, 3}
>>> s
{1, 2, 3}
>>> s = set(range(3))
>>> s
{0, 1, 2}
#set()是可以对可迭代对象进行转化的

增加

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

这里可以发现,在增加已存在的元素时,set集合并不会继续追加新的元素。没有重复的元素

>>> help(s.update)
Help on built-in function update:

update(...) method of builtins.set instance
    Update a set with the union of itself and others.
    #用自身和他人的联合更新一个集合。

update()这个方法,就是把自己和别人union起来,但是会去重。

>>> s
{0, 1, 2, 3}
>>> s.update(range(4,7))
>>> s
{0, 1, 2, 3, 4, 5, 6}

这个方法和列表类似,附加一个可迭代对象,没有返回值,原地修改

>>> s
{0, 1, 2, 3, 4, 5, 6}
>>> s.update(range(5,8))
>>> s
{0, 1, 2, 3, 4, 5, 6, 7}

有上述表达式可发现,set集合对于已经存在的元素,什么也不做。

删除

  1. set.remove
>>> help(s.remove)
Help on built-in function remove:

remove(...) method of builtins.set instance
    Remove an element from a set; it must be a member.

    If the element is not a member, raise a KeyError.

看remove函数的签名:

  • 会从集合中删除你传入的变量,但是这个变量必须是集合中已有的元素。
  • 如果这个元素不存在,是会抛出异常的。
>>> s
{0, 1, 2, 3, 4, 5, 6, 7, 8}
>>> s.remove(0)
>>> s
{1, 2, 3, 4, 5, 6, 7, 8}
>>> s.remove(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 0

在上面删除时可发现:原地修改,不返回值

  1. set.pop
    pop方法用来弹出一个元素
>>> help(s.pop)
Help on built-in function pop:

pop(...) method of builtins.set instance
    Remove and return an arbitrary set element.
    Raises KeyError if the set is empty.

函数签名中可以看出,pop和remove有一个区别,pop会return这个被删除的值。同时,如果集合为空,还进行pop的话,会抛出KeyError异常。

>>> s.pop()
1
>>> s.pop()
2
>>> s.clear()
>>> s.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'pop from an empty set'

这里用pop分别删除了2个元素,但是没有办法指定删除哪个。

  1. set.discard
>>> help(s.discard)
Help on built-in function discard:

discard(...) method of builtins.set instance
    Remove an element from a set if it is a member.

    If the element is not a member, do nothing.

discard和pop的区别:discard可以选择想要删除的元素值,而不是像pop那样,只能从队首或者队尾删除。
有点类似于list中的remove方法:

>>> s = {'kidult', '让你的生活', '变得', '更自信'}
>>> s
{'更自信', 'kidult', '变得', '让你的生活'}
>>> s.discard('kidult')
>>> s
{'更自信', '变得', '让你的生活'}

discard可以指定删除哪个元素,且还有一点于pop不同:discard是原地修改,不返回值

>>> s.discard('smart')
>>> s
{'更自信', '变得', '让你的生活'}

当删除不存在的值时,也不会报错。

  1. 小结
  • remove:删除给定的元素,元素不存在抛出KeyError
  • discard:删除给定的元素1,元素不存在也可以继续运行
  • pop:随机删除一个元素并返回,集合为空是,抛出KeyError
  • clear:清空集合

修改

集合不能修改单个元素

查找

集合不能通过索引访问,因为集合不是一个线性结构。
集合没有访问单个元素的方法
集合不是线性结构,集合元素没有顺序

成员运算符

在集合中,很多时候都会涉及到成员包含计算:

  • in
  • not in

用成员运算符来判断一个元素是否在容器中
set、list、tuple、str、int都是的

>>> 3 in [1, 2, 3, 4]
True
>>> 10 in {1, 2, 3, 4}
False
>>> 10 not in (1, 2, 3, 4)
True
>>> 'kidult' not in 'kidult smart'
False

无论是数字、字符串都是用来判断的
成员运算符返回布尔值,所以经常用在if判断句中

在集合这里提到成员运算符是因为:

在集合中是没有顺序的,所以集合的成员运算符和其他线性结构的时间复杂度不同。

在做成员运算时,列表的效率和列表的规模有关集合的效率和集合的规模无关

  • 集合的效率:O(1)
  • 列表的效率:O(n)

所以可能的话,做成员运算的时候,会把列表、元组转化成集合来做。

小结

还有一部分集合的数据结构放在字典的部分。虽然有点不太好理解,也在承受范围内,今天偷懒了,明天要加油啊!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值