名师广场

登录
工作室首页 > 话题列表 > 话题详情

只看楼主 #交流探讨#切片还是索引

  • 楼主

    顾杭林

    话题:38

    精华:0

    积分:194

    阅读:525 回复:2 2022-03-21 08:33:19

  • 2楼

    王泽宇

    话题:25

    精华:0

    积分:107

    顾老师您好,思考了您提出的问题,交流一些我的个人看法:

    1. 数组索引的本质:我们都知道,数组是连续存储的空间单位,但其实它指的是在虚拟内存中的连续存储。事实上,我们用数组下标访问一个数据的时候,它会在编译过程中经历两张向量表的映射,本质上就是对应到虚拟内存,再指向物理内存,随后读取数据。大致可以表示成这样的图:

    lQDPDhtB0Wy1zJbNAYjNAzawAFdMAsZTAzoCPIJv7gBVAA_822_392.jpg_720x720q90g.jpg

    所以说,当使用索引获取值时,它是直接映射到信息向量表的内存地址的,当这个地址不存在时,就会返回错误。

    2. 而切片呢,我查阅了相关资料,没有找到python实现切片的底层代码。但是从切片提供的接口(begin, end, step)可以看出,它本质应该是一个迭代器。从这个角度,我找到了一个博主写的模拟切片的迭代方法:

    16478518747476.png

    所以说,切片在映射到内存之前,会先经历一个判断的异常捕获,如果抛出异常了,那么能够返回一个空值,从而避免了溢出错误。

    这样,其实就很好理解为什么切片获取会比索引获取耗费更多的时间了。因为切片比索引多了两个程序步,导致执行时间变长。

    ヾ(●゜ⅴ゜)ノ当然!也许python的底层代码会优化迭代的过程,所以以上仅是一些个人的猜想~不当之处请指正~

    参考资料:

    javascript:void(0);

    javascript:void(0);

    2022-03-21 16:39:20

说:

还能输入140发送

关闭

扫码登录更安全

空间登录

手机扫码,安全登录

二维码已失效 请点击刷新
请打开人人通空间APP扫一扫登录

手机扫码,安全登录

扫描成功!

请在手机上确认登录

取消二维码登录

二维码

名师工作室移动端

  • 扫一扫,直接在手机上打开
  • 随时随地使用工作室
分享
回到顶部