列表的下标/索引到底是干什么的?

当我们想要从列表里面去修改数据或者插入数据的时候,我们往往要用到列表的下标/索引。

列表是有序排列的,从0、1、2、3...按照这个顺序有序的排列。

那么问题来了,我们的程序是怎么处理数据的?

首先我们的处理的数据是暂存在内存里的,然后再保存到磁盘上,在处理数据时,我们没有涉及到磁盘上面的文件,我们的数据处理都是在内存上面完成的。

内存当中存储的数据,是暂时性的,也就是说,你电脑一关,数据就没了。而且内存的空间是很有限的。

而磁盘当中存储的数据,是永久性的,只要你磁盘不崩、不坏,基本上数据都存在。

所以我们目前操作的程序,本质上列表也好,字典也好,都是储存在内存当中的。

那么,我们现在在内存当中,假设我们有一方空间,里面有个列表,列表里有些数据,我们现在想要找到列表里的数据,那我们要怎么找呢?

我们要通过下标找这些数据。

那我们为什么要通过下标就可以找到呢?

那么一定是下标和列表的寻址(即寻找数据在内存中的存储位置)有关系。

列表是有序的,如0 1 2 3 4 5 6。

这就是列表的寻址公式:你要找的数据的位置 = 首个数据的位置 + 下标 * 数据的类型占用的空间(每种数据类型占用的空间都是不一样的)

如果下标是 0 的时候:数据的位置 = 首个数据的位置 + 0 * 数据的类型占用的空间 = 首个数据的位置

如果下标是 1 的时候:数据的位置 = 首个数据的位置 + 1 * 数据的类型占用的空间

数据的位置 = 首个数据的位置 * 数据的类型占用的空间

即数据的第二位,想要找到首个数据的位置,下标应减一,才能得到首个数据的位置:

数据的位置 = 首个数据的位置 + (1-1) * 数据的类型占用的空间 = 首个数据的位置

这样,如果下标从1开始的话,而且我们操作列表比较频繁的话,想要查询数据的位置,每次都要在底层进行加减的操作,比较麻烦,何必不从0开始算起呢。这样大家能理解吗?