Skip to content

Latest commit

 

History

History
212 lines (144 loc) · 5.44 KB

170-234325-缝合_zip.sy.md

File metadata and controls

212 lines (144 loc) · 5.44 KB
show version enable_checker
step
1.0
true

zip 编组

回忆

  • 上次遍历了字典
  • 字典在 for 循环中的遍历中
    • 遍历的是字典的 keys()
  • 除了 keys()之外,还可以
    • 遍历 values()
    • 遍历 items()
  • keys()最简单明确
  • items()最全面
  • 好像形成 dict 字典的时候可以用一个 zip 函数
  • zip 函数怎么用来着?🤔

查询手册

图片描述

  • zip 类的对象
    • 是可迭代或者说可遍历的对象 iterable
  • 我们做一个试试

动手

图片描述

  • zip()生成一个 zip 类的变量
  • 这个 zip 类的变量是可迭代的
  • list 类的构造函数不是可以接收一个可迭代的变量么?
  • 用 zip 类变量可以生成 list 类变量么?

list

图片描述

  • 可以生成列表
  • 新列表的元素是元组
    • 从两个原始列表来
    • 同样位置的元素构成的
    • 元组

缝合

图片描述

  • 说白了就是把两个列表缝合到了一起
    • 新的对象的第 0 个元素是原来列表第 0 个元素缝合起来的元组
    • 第 1 个也是
    • 如此下去

图片描述

  • 如果两个原始列表长度不一致会如何?

exhaust

图片描述

  • 最短的元组耗尽了就完成
  • 后面的缝不上的都被去掉了

图片描述

  • 我们缝合个好玩的

相似

图片描述

图片描述

  • 那这个 zip 对象如何生成字典呢?

dict

  • dict 类的构造函数不是可以接受一个 iterable 的对象么?
  • 直接使用 dict 的构造函数就可以

图片描述

  • 返回一个 dict 对象
  • 如果是三组原始列表呢?

三组

图片描述

  • 生成列表
    • 成功
    • 列表有五个元素
    • 每个元素是一个三维元组
  • 那这个可以生成字典么?

字典

图片描述

  • 生成字典
    • 失败
    • 字典的本质是 key-value 的集合
    • key-value 是一一对应的
    • 三项有一项不知道如何对应
  • 但如果我就想生成字典
    • key 来自 l1
    • value 来自 l2、l3 生成的列表
  • 怎么做呢?

字典

图片描述

  • 这样生成是可以的
    • 先把后两个缝上
    • 然后后两个作为一个 iterable 对象,再和第一个缝
  • 现在给的 value 是元组
  • 但是我想要的 value 是列表
  • 可以做么?

遍历

图片描述

  • 这样按照次序把三个列表都遍历一遍
  • 最终结果也就得到了
  • 我可以直接拿 zip 类缝好的变量遍历么?

直接遍历 zip

图片描述

  • 为什么能够遍历 zip 型变量
  • 因为他是可遍历的 iterable
  • 为什么他是 iterable 的?

查看帮助

图片描述

  • 因为 zip 类实现了iter()方法
  • 他就像一个老裁缝
  • 只要是可迭代的对象
  • 他都能给缝合到一起

老裁缝

图片描述

  • 有阳就有阴
  • 理论上函数都有逆
  • zip 本来是把若干组 iterable 的变量编组
  • 那能否反过来
  • 把编号组的对象恢复成几组变量呢?

解组 zip 对象

图片描述

  • 我们动手试试

动手

图片描述

  • 解铃换需系铃人
  • zip 函数可以解开一个 zip 对象
  • 怎么缝合的,还要怎么拆线
  • 函数名没有变
  • 只是里面加个*

图片描述

  • 把解缝合的结果赋给两个变量可以么?

绕圈

图片描述

  • 解开的对象可以赋给两个元组
  • 原来的 zipped 被清空了
  • 这绕了一圈不就回来了么?
  • 一顿操作猛如虎
  • 不愧是我二百五
  • 如果压缩的包是来自于三个元组呢?

五行

图片描述

  • 多少层都没事
  • 都能给缝上
  • 也都能给拆开

图片描述

总结

  • 这次研究了 zip
  • zip 是一个老裁缝
  • 几列可迭代对象可以用 zip 缝合为 zip 对象
  • zip 对象是可迭代的
  • zip 缝合的对象也可以解组为独立的几组元组
  • 其实还有一个 enumerate 函数好像也是编组
  • 有什么区别么?🤔
  • 下次再说 👋