Python语言的创始人解释为什么Python数组的索引从0开始
2013-11-04 10:09
716 查看
最近有人在Twitter是问我为什么Python使用以0为第一位的数组索引方式(以下简称0-based),并让我看一篇关于这个主题的文章(很有趣)。这引起了我不少的回忆。ABC语言——Python的祖先之一,使用的是以1为第一位的索引方式(以下简称1-based),而C语言——另一种对Python有影响巨大的语言,使用0-based方式。我最早学习的几种语言(Algol, Fortran, Pascal),有的是1-based的,有的是不固定的。我认为,之所以让我决定让Python使用0-based索引方式的原因之一是Python的切片(slice)语法。
让我们来先看看切片的用法。可能最常见的用法就是“从数组中切出前n位”或“从数值的第i位起切出n位”(前一种实际上是i==起始位的特殊用法)。如果使用这种语法时不需要表达成难看的+1或-1补充方式,那将是非常的优雅。
使用0-based的索引方式,Python的半开区间切片和缺省匹配区间切片语法变得非常漂亮:a[:n] 和 a[i:i+n],前者的标准写法就是a[0:n]。
如果是1-base的索引方式,那么,想让a[:n]表达成“取前n个元素”,(这是不行的),你要么使用一个闭合区间切片语法,要么在切片语法中使用切片起始位和切片长度2个参数的形式。使用1-based索引方式,半开区间切片语法变得不优雅。这种方式下使用闭合区间切片语法,为了表达从第i位取n个元素时你必须写出a[i:i+n-1]。这样看来,如果使用1-based的索引,使用切片起始位+长度的形式更合适。这样你可以写成a[i:n]。事实上ABC语言就是这样做的——它使用了一个独特的表达方式,写成a@i|n。(参看http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS。
但是,index:length这种方式在其它情况下适用吗?说实话,这点我有些记不清了,但我想我是被半开区间语法的优雅迷住了。特别是当两个切片操作位置邻接时,第一个切片操作的终点索引值是第二个切片的起点索引值时,太漂亮了,无法舍弃。例如,你想将一个数组以i,j两个点切成三部分——这三部分将会是a[:i],a[i:j]和a[j:]。
这就是为什么我要让Python使用0-based的索引方式的原因。
[英文原文:why Python uses 0-based indexing ] via: http://www.aqee.net/why-python-uses-0-based-indexing/
让我们来先看看切片的用法。可能最常见的用法就是“从数组中切出前n位”或“从数值的第i位起切出n位”(前一种实际上是i==起始位的特殊用法)。如果使用这种语法时不需要表达成难看的+1或-1补充方式,那将是非常的优雅。
使用0-based的索引方式,Python的半开区间切片和缺省匹配区间切片语法变得非常漂亮:a[:n] 和 a[i:i+n],前者的标准写法就是a[0:n]。
如果是1-base的索引方式,那么,想让a[:n]表达成“取前n个元素”,(这是不行的),你要么使用一个闭合区间切片语法,要么在切片语法中使用切片起始位和切片长度2个参数的形式。使用1-based索引方式,半开区间切片语法变得不优雅。这种方式下使用闭合区间切片语法,为了表达从第i位取n个元素时你必须写出a[i:i+n-1]。这样看来,如果使用1-based的索引,使用切片起始位+长度的形式更合适。这样你可以写成a[i:n]。事实上ABC语言就是这样做的——它使用了一个独特的表达方式,写成a@i|n。(参看http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS。
但是,index:length这种方式在其它情况下适用吗?说实话,这点我有些记不清了,但我想我是被半开区间语法的优雅迷住了。特别是当两个切片操作位置邻接时,第一个切片操作的终点索引值是第二个切片的起点索引值时,太漂亮了,无法舍弃。例如,你想将一个数组以i,j两个点切成三部分——这三部分将会是a[:i],a[i:j]和a[j:]。
这就是为什么我要让Python使用0-based的索引方式的原因。
[英文原文:why Python uses 0-based indexing ] via: http://www.aqee.net/why-python-uses-0-based-indexing/
相关文章推荐
- Python语言的创始人解释为什么Python数组的索引从0开始
- Python语言的创始人解释为什么Python数组的索引从0开始
- Python语言的创始人解释为什么Python数组的索引从0开始
- Python之父:为什么Python数组下标从0开始
- 小典故:为什么数组的索引总是从0开始,而不是1?
- 我为什么说 Python 是大数据全栈式开发语言
- Hanol towers [Gym-101243B]———Python语言在编程中的文件读入与输出,例题解释
- PERL语言入门:第三章:列表与数组:访问数组元素与特殊索引
- Python 刚开始学习,记录与其他语言感受
- 程序员都秃顶?Python创始人笑了,养生还得学这门语言
- 为什么数组是从0开始的
- 为什么计算机很多语言里的时间都是从1970年1月1日午夜开始计算?
- 哎。。开始换语言了。。python 今天开始正式做东西。
- 从0开始自学Python:8、函数
- 为什么要学习Python语言
- 新浪sae开始支持Python、Java语言,邀请码!
- Python Series从0开始索引的方法
- 学习一门计算机语言,python开始
- 开始自学python语言
- 数组下标为什么要从0开始