show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次遍历了字典
- 字典在 for 循环中的遍历中
- 遍历的是字典的 keys()
- 除了 keys()之外,还可以
- 遍历 values()
- 遍历 items()
- keys()最简单明确
- items()最全面
- 好像形成 dict 字典的时候可以用一个 zip 函数
- zip 函数怎么用来着?🤔
- zip 类的对象
- 是可迭代或者说可遍历的对象 iterable
- 我们做一个试试
- zip()生成一个 zip 类的变量
- 这个 zip 类的变量是可迭代的
- list 类的构造函数不是可以接收一个可迭代的变量么?
- 用 zip 类变量可以生成 list 类变量么?
- 可以生成列表
- 新列表的元素是元组
- 是
- 从两个原始列表来
- 同样位置的元素构成的
- 元组
- 说白了就是把两个列表缝合到了一起
- 新的对象的第 0 个元素是原来列表第 0 个元素缝合起来的元组
- 第 1 个也是
- 如此下去
- 如果两个原始列表长度不一致会如何?
- 最短的元组耗尽了就完成
- 后面的缝不上的都被去掉了
- 我们缝合个好玩的
- 那这个 zip 对象如何生成字典呢?
- dict 类的构造函数不是可以接受一个 iterable 的对象么?
- 直接使用 dict 的构造函数就可以
- 返回一个 dict 对象
- 如果是三组原始列表呢?
- 生成列表
- 成功
- 列表有五个元素
- 每个元素是一个三维元组
- 那这个可以生成字典么?
- 生成字典
- 失败
- 字典的本质是 key-value 的集合
- key-value 是一一对应的
- 三项有一项不知道如何对应
- 但如果我就想生成字典
- key 来自 l1
- value 来自 l2、l3 生成的列表
- 怎么做呢?
- 这样生成是可以的
- 先把后两个缝上
- 然后后两个作为一个 iterable 对象,再和第一个缝
- 现在给的 value 是元组
- 但是我想要的 value 是列表
- 可以做么?
- 这样按照次序把三个列表都遍历一遍
- 最终结果也就得到了
- 我可以直接拿 zip 类缝好的变量遍历么?
- 为什么能够遍历 zip 型变量
- 因为他是可遍历的 iterable
- 为什么他是 iterable 的?
- 因为 zip 类实现了iter()方法
- 他就像一个老裁缝
- 只要是可迭代的对象
- 他都能给缝合到一起
- 有阳就有阴
- 理论上函数都有逆
- zip 本来是把若干组 iterable 的变量编组
- 那能否反过来
- 把编号组的对象恢复成几组变量呢?
- 我们动手试试
- 解铃换需系铃人
- zip 函数可以解开一个 zip 对象
- 怎么缝合的,还要怎么拆线
- 函数名没有变
- 只是里面加个*
- 把解缝合的结果赋给两个变量可以么?
- 解开的对象可以赋给两个元组
- 原来的 zipped 被清空了
- 这绕了一圈不就回来了么?
- 一顿操作猛如虎
- 不愧是我二百五
- 如果压缩的包是来自于三个元组呢?
- 多少层都没事
- 都能给缝上
- 也都能给拆开
- 这次研究了 zip
- zip 是一个老裁缝
- 几列可迭代对象可以用 zip 缝合为 zip 对象
- zip 对象是可迭代的
- zip 缝合的对象也可以解组为独立的几组元组
- 其实还有一个 enumerate 函数好像也是编组
- 有什么区别么?🤔
- 下次再说 👋