美文网首页
为什么python中list的索引从0开始?

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

作者: 我心似海洋1995 | 来源:发表于2016-09-11 23:00 被阅读231次

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索引法的原因。

相关文章

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

    java建立数组, int[] a = new int[3], 建立一个以为数组并将其初始化位3个位置的内存,a[...

  • 4. List

    用索引来访问list中每一个位置的元素,记得索引是从0开始的 当索引超出了范围时,Python会报一个IndexE...

  • 【每天来点python】列表与元组

    学习网址:使用list和tuple 需要注意的一些概念: Python的索引是从0开始的,所以,要确保索引不要越界...

  • Python基础学习4:高级特性

    切片 (list, tuple, 字符串) L[0:3] / L[:3] 从索引0开始取,直到索引3为止,但不...

  • 1.list和tuple

    list的使用 声明list变量 获取list元素个数len() 访问list每一个位置的元素,索引位置从0开始 ...

  • 高级特性-廖雪峰Python教程

    切片 L[0:3:x]表示,从索引0开始取,直到索引3为止,但不包括索引3,x为步长。 tuple也是一种list...

  • k-MEANS

    Python中 list和np.array的区别: data[:,0]列表的索引必须是整数,而这里是tuple类型...

  • python&pymysql

    一 python基础 1.Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。 ...

  • Python -- 切片、迭代

    切片 1、取一个list或tuple的部分元素,采用切片方式:L[0:3]:表示从索引0开始取,直到索引3为止,但...

  • [python]list(数组)和tuple

    一、listlist是一种有序的集合,类似数组。1、len()获取list的长度 1、获取元素索引从0开始 索引也...

网友评论

      本文标题:为什么python中list的索引从0开始?

      本文链接:https://www.haomeiwen.com/subject/nlryettx.html