为什么python中list的索引从0开始?

java建立数组, int[] a = new int[3], 建立一个以为数组并将其初始化位3个位置的内存,
a[1] = 3;java的索引从0开始,而C和python是从0开始的。
为什么python中list的索引从0开始呢?
因为切片语法的优雅。

我们先来看看切片语法的使用吧。它最常见的使用应该是“切出数组的前n位”和“切出数组第i位后的 n位”(前者是后者在i==起始位下的特例)。如果我们不需要使用难看的+1或-1补偿方式,那么代码就会美观许多。

通过使用0-based索引法,Python的半开区间以及缺省匹配区间都很美观,如:a[:n] 和a[i:i+n];前者是a[0:n]的省略写法。

在1-based索引法下,如果你想用a[:n]来表示切出前n个元素的话,你只能选择在切片语法中使用切片起始位和切片长度2个参数,或者闭区间的用法。使用1-based索引法,半开区间切片语法就显得不够美观。同样地,使用闭区间切片语法的话,你只能用a[i:i+n-1]来表示从第i位取n个元素。所以如果使用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索引法的原因。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近在写个性化推荐的论文,经常用到Python来处理数据,被pandas和numpy中的数据选取和索引问题绕的比较...
    shuhanrainbow阅读 10,061评论 6 19
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,358评论 0 33
  • 未看之时,对黄山的日出抱有无尽的幻想,又深深地将幻想守在心底,生怕失望。天气变幻莫测,能不能看到全看老天愿不愿成全...
    荆桃过雨阅读 1,756评论 0 0
  • 我们总是在荒废身边的一切,比如,家人、爱人。 你要说这个世界上什么是轻而易举得到的,可又非常奢侈的东西是什么。毫无...
    四月的金牛阅读 1,526评论 0 0
  • 构建软件设计的方法有两种:一种是把软件做得很简单以至于明显找不到缺陷;另一种是把它做的很复杂以至于找不到明显的缺陷...
    __越过山丘__阅读 2,750评论 0 0

友情链接更多精彩内容