show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次研究了 zip
- zip 是一个老裁缝
- 几列可迭代对象可以用 zip 缝合为 zip 对象
- zip 对象是可迭代的
- zip 缝合的对象也可以解组为独立的几组元组
- 其实还有一个 enumerate 函数好像也是编组
- 有什么区别么?🤔
- 看起来是给一个可迭代对象缝上编号
- 动手试试
- 这很简单啊
- 就是缝上编号啊
- 如果用 zip 应该怎么做呢?
- 如果我想从 1 开始呢?
- 需要控制 range 的范围
- 使用 enumerate 可以控制起始数字么?
- 构造函数中的参数有个 start
- start 指的是开始数字
- 默认是从 0 开始
- 不过不能设置步长
- 如果想设置步长怎么办?
- 这样就可以把特定编号缝合到 iterable 的对象上去了
- 这样可以优化循环么?
- 原来是这么写的
- 尝试优化
- 这优化了么?
import time
t0 = time.time()
l =[-1, 1, -2, 2]
for i in range(len(l)):
if l[i] < 0:
l[i] = 0
print(l)
t1 = time.time()
l = [-1, 1, -2, 2]
for index,num in enumerate(l):
if num < 0:
l[index] = 0
print(l)
t2 = time.time()
print((t1-t0)/(t2-t1))
-
提速不少
-
如果我再遍历 iterable对象 的时候修改了 iterable对象
-
会如何呢?
- 这只能发生在可变的可迭代对象上
- 比如说列表
- 有一个计数器 counter 盯着当前的 target
- 每次循环 counter 就递增
- 直到到达了整个可迭代对象的边界
- 如果删除元素可能会引起跳过某些元素
- 我们来做一个试试
- 第三轮符合 if 条件
- 删除
- 删除之后 len(a)也从 5 到了 4
- 所以 4 次之后就结束了
- 循环中是否可以添加呢?
- 添加时可以的
- 会增大循环次数
- 甚至实现死循环的效果
- 除了 append 在结尾添加之外
- 可以 insert 在开头添加么?
- 在开头添加也是可以的
- 不过要注意要把 if 的触发条件满足的那一项修改一下
- 否则的话
- 会形成无限次在开头插入的效果
- 这次研究了 enumerate()
- enumerate()是个特殊的 zip 函数
- enumerate()把列表和编号缝在一起
- 还可以设置起始值 start
- 几列可迭代对象可以缝合成 zip 对象
- enumerate 可以给缝合好的 zip 对象缝上编号
- 这样可以把 zip 组转化为为有编号的 zip 组
- 遍历过程iterable的过程中还可以
- 增删改iterable
- 可迭代的可迭代对象
- 就是列表的嵌套
- 得到个二维列表
- 如何遍历二维列表呢??🤔
- 下次再说 👋