为什么列表或元组的索引从0开始?

时间:2015-11-22 12:48:58

标签: python

为什么列表或元组的索引从0开始?如C中所述here,这是由指针引起的。 Python中没有指针。那么,它与CPython有关吗?还是由于其他原因?

3 个答案:

答案 0 :(得分:1)

这不仅仅是Python。大多数(如果不是全部)编程语言也开始在0处索引。它使许多事情变得简单和一致。

答案 1 :(得分:0)

实际上它必须与CPython实现。 CPython中的列表对象由以下C结构表示。 ob_item是列表元素的指针列表。 assigned是在内存中分配的插槽数。

typedef struct {
    PyObject_VAR_HEAD
    PyObject **ob_item;
    Py_ssize_t allocated;
} PyListObject;

看看这篇描述python list implementation的文章。

这个决定背后的另一个好理由是切片符号。看看python作者的这个article

答案 2 :(得分:0)

答案,指针算术。

在C语言和其他语言中,可以通过将索引添加到数组的内存地址来访问数组成员。因此,向地址添加0会给出第一个位置,1给第二个位置,等等。看这里:

https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/pointer.html

因此,它是索引约定,因为底层机器代码的运行方式。