python索引区间_23. 为什么Python索引从0开始?

本系列文章译自Python之父 Guido van Rossum 的系列博客“The History of Python”。这个博客系列对我们理解Python及其演变很有帮助,经Guido同意,在这里翻译推荐给大家,希望大家喜欢,也请大家多多指教!

本系列地址:http://blog.kantli.com/theme/1

1

Twitter 上有人问我为什么 Python 的索引从 0 开始,并提供了一篇关于这个问题的文章(写得很好)的链接。

我记得当时我也考虑过很多因素。Python 借鉴最多的 ABC 语言索引是从 1 开始的,而另一个对 Python 影响很大的是 C语言,索引从 0 开始。我最初接触的几门语言(Algol,Fortran,Pascal)的索引有从 1 开始的,也有其它方式的。

2

我想,当时决定索引应该从 0 开始的关键因素是切片操作。

让我们看一些实际的例子:可能用户使用切片操作最多的,是获取最前面的 n 个值,或者第 i 个之后的 n 个值(获取最前面的 n 个值其实是一种特例,即 i == 第一个索引)。

显然,最好是这两种操作都不需要使用什么奇怪的 +1 或 -1 来计算位数。

如果索引从 0 开始,并使用半开区间以及合理的默认值(如 Python 后来所设定的),这两种操作的表达式可以非常优雅:a[:n] 或 a[i:i+n],前面一个表达式等价于 a[0:n]。

3

而如果索引从 1 开始,要用表达式 a[:n] 表示最前面的 n 个值,就必须使用闭区间,或者将句法改为用第一个参数表示切片的第一个元素,第二个参数 n 表示切片长度。

同时使用半开区间和从 1 开始的索引时,表达式总是不够优雅,因为使用闭区间后,取第 i 个之后的 n 个值的表达式就是 a[i:i+n-1]。

那么,使用另一种句法好不好呢?这样我们就可以直接用表达式 a[i:n]——事实上 ABC 就是这么干的,用户可以直接写 a@i|n(参考文档)。

4

使用索引加长度的句法能不能在其它地方也保持优雅呢?老实说,关于这一点,我的记忆已经模糊了。

不过,我想,我显然被半开区间的优雅所吸引了。特别是对毗邻区间进行切片时,第一个表达式的结尾正好是第二个表达式的开头,实在是非常美妙。

比如说,如果我们以索引 i 和 j 为间隔,把一个字符串分为三个部分,表达式即为 a[:i],a[i:j],a[j:]。

这就是为什么 Python 的索引是从 0 开始的。

公众号:ReadingPython

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python,列表(list)、元组(tuple)和字符串(string)等数据类型的索引都是从0开始的,而不是从1开始的。这是因为Python的设计者Guido van Rossum认为从0开始的索引更加自然和方便。 从0开始的索引有以下好处: 1. 方便计算:从0开始的索引可以方便地通过取模运算来计算偏移量,这在编写计算机程序时非常常见。 2. 方便实现:从0开始的索引可以使编程语言的实现更加简单而高效。 3. 方便理解:从0开始的索引可以很好地反映出数据的物理存储方式,即第一个元素位于序列的最低地址。 虽然从0开始的索引可能会让初学者感到困惑,但是熟悉后可以带来更高效和方便的编程体验。 ### 回答2: Python索引值从0开始。 Python采用从0开始的索引值,是因为其底层实现是使用C语言,而C语言的数组索引也是从0开始的。在设计Python语言时,选择了从0开始的索引值,一方面是为了与C语言保持一致,另一方面是为了简化代码的实现和理解。 从0开始的索引值可以更好地与数学的序号表示方式对应,例如,元素a的索引为0,元素b的索引为1,依次类推。这种方式更直观地展示了元素在列表的排列顺序,同时也便于进行计算。 此外,从0开始的索引值还避免了一些常见错误,例如,使用偏移量时,从0开始可以直接使用索引值作为偏移量,而不需要进行减1操作。 总的来说,Python选择从0开始的索引值主要源自其底层实现和简化代码的需要,同时也与数学的序号表示方式保持一致,使得代码更加清晰和易于理解。 ### 回答3: Python索引值从0开始,而不是从1开始。这是因为在计算机科学,数组的索引是从0开始的,而不是从1开始的。 历史上,早期的编程语言,比如Fortran和C,都是从0开始进行数组索引。这是因为在计算机内部,数组元素在内存是连续存储的,每个元素占据一个连续的内存地址。通过使用0作为起始索引,可以更容易地计算数组元素的内存地址。 另外一个原因是简化代码。通过从0开始索引,可以直接使用偏移量来访问数组的每个元素,而无需使用复杂的偏移量计算公式。 尽管索引从0开始可能在刚开始学习编程时有些困惑,但是一旦习惯了这种索引方式,它可以带来许多好处。例如,在循环遍历数组或列表时,可以使用简单的循环变量(比如for i in range(len(array)))来访问每个元素,而不需要额外的计算或转换。 总结起来,Python选择从0开始索引是为了和其他编程语言保持一致,并且简化代码和内存寻址操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值