为什么列表或元组的索引从0开始?如C中所述here,这是由指针引起的。 Python中没有指针。那么,它与CPython有关吗?还是由于其他原因?
答案 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
因此,它是索引约定,因为底层机器代码的运行方式。