show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次复习了字符序列
- 字符序列和列表、元组一样都属于序列
- 序列的东西他全能用
- in
- 加法、乘法运算
- 索引
- 切片
- index
- len
- max
- min
- 字符序列其实就是
- 字符连成的序列
- 一个个字符连起来成了串
- 滔滔不绝、川流不息
- 流动起来
- 字节序列就是字符串
- 和列表、元组一样都是有序的
- 有无序的容器吗??🤔
- 括号类型
- 小括号对应的是元组 tuple
- 不可变的序列
- 中括号对应的是列表 list
- 可变的序列
- 元组 tuple 是只读的序列
- 小括号对应的是元组 tuple
- 大括号对应的是什么数据类型呢?
- set 是什么意思呢?
- set 是集合
- 集合是一个容器类型
- 无序的
- 内部元素都不同的
- 这怎么理解呢?
- 我们先看看
- 无序
- set 是一个容器
- 容器里面的元素是没有顺序的
- 如何理解内部元素都不同呢?
- 这就是集合容器的两个特点
- 集合元素没有顺序
- 每个元素都必须是唯一的
- 这也是集合和列表、元组不同的地方
- 回忆列表对象如何添加列表项元素
- 集合用什么方法呢?
- 集合用的方法是add
- 如果集合里已经有了这个元素
- 那么add函数就没有任何效果
- 这是集合和列表最大的区别
- 这有什么意义么?
- 比如已经入库的超链接就不用再爬取了
- 已经收录的元素不用重复收录
- 比如已经入库的超链接就不用再爬取了
- 集合中的元素都是不同的
- 相同的就会被合并同类项
- 集合可以清空吗?
- help(set.clear)
- 这个和列表一样
- 列表 list 是 清空所有的列表项
- 集合 set 是 清空 所有的集合项
- 这个有点太猛了
- 我只想删除某个元素呢?
- 找到删除函数remove
- 删除指定的集合项元素
- 被删除的必须得是集合的元素
- 不是的话
- 就会报错
- 集合 set 的 remove 函数
- 很像 列表 list 的 remove 函数
- 如果 remove 了不存在的元素
- 都要报错
- 有不报错的方法么?
- 有就删掉
- 没有就忽略
- 也不报错
- 还有和删除相关的么?
- 试试
- 如果集合空了
- 就不能 pop 了
- 报错
- 如果集合里有元素
- 就弹出一个并返回
- 这pop弹栈函数好像列表也有
- 列表总是弹出尾部的元素项
- 但是集合是没有次序的
-
弹出也和定义次序不相关
- 这和 list 是不同的
-
pop()在 set、list 中的不同
- list 是有序的,弹出的是最后一个
- set 是无序的,随机弹出一个
-
以上都是集合中元素的增减
-
有一种集合不能增删改
-
是什么集合呢?
- frozenset
- 构造之后就不能增删改了
- 就像元组一样
- 列表可以改,但是元组不行
- 集合可以改,但冰封集合不行
- 集合可以拷贝吗?
- 直接=赋值
- 就是把地址赋过去
- 实际上还是一个集合
- 想要在内存要两个集合怎么办?
- 不过这是一个 shallow 拷贝
- 浅拷贝
- 怎么证明呢?
- s1 中有三个元素
- 数字 1
- 数字 2
- 元组(3,4)
- s2 是 s1 的浅拷贝
- s2 有自己独立的地址
- 但是他的元组元素和 s1 的元组
- 指向了相同的地址空间
- 这就是浅拷贝
- 我想要深拷贝
- 怎么办呢?
- 这个东西看起来也差不多
- 也没深到那里去啊
- 为什么深拷贝后 s1 和 s2 中的(3,4)还是指向一个地址空间?
- 为什么会这样呢?
- 我们还是需要从根源考虑
- 元组的深拷贝
- 因为元组是只读的
- 所以深拷贝和浅拷贝一致
- 到游乐场验证一下
- 确实如此
- 那深拷贝的意义在哪里呢?
- 深拷贝一般对于列表是特别有效的
- 那如果集合中的元组换成列表呢?
- 报错了
- 列表不是 hashable 的元素
- 所以列表不能作为集合元素
- 那集合可以作为集合元素么?
- 同样的集合也不是 hashable 的元素
- 也不能作为集合元素
- 所以只有元组能作为集合元素了
- 这就是集合的拷贝细节
- 集合有没有运算呢?
- 这次学习了集合
- 集合有两个特点
- 里面不能有重复的元素
- 无序
- 集合可以
- 添加 add
- 清空 clear
- 指定删除 remove
- 丢弃 discard
- 弹出 pop
- 这就是集合元素的操作
- 有点类似于列表list
- 列表如果不能修改就是元组
- 集合如果不能修改是什么呢?🤔
- 下次再说 👋