Python语言之父解释为什么Python数组的索引从0开始

简介: Python数组从0开始,这是为什么呢?Python之父Guido van Rossum是这么解释的:

Python数组从0开始,这是为什么呢?Python之父Guido van Rossum是这么解释的:

image.png

最近有人在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的索引方式的原因。


相关文章
|
2月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
66 4
|
2月前
|
JSON JavaScript 前端开发
Python+JAVA+PHP语言,苏宁商品详情API
调用苏宁商品详情API,可通过HTTP/HTTPS发送请求并解析响应数据,支持多种编程语言,如JavaScript、Java、PHP、C#、Ruby等。核心步骤包括构造请求URL、发送GET/POST请求及解析JSON/XML响应。不同语言示例展示了如何获取商品名称与价格等信息,实际使用时请参考苏宁开放平台最新文档以确保兼容性。
|
5月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
109 20
|
7月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
203 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
9月前
|
Unix 编译器 C语言
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
86 5
|
11月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
312 10
|
11月前
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
350 4
|
存储 数据处理 索引
如何删除 Python 数组中的值?
【8月更文挑战第29天】
468 9
|
索引 Python
向 Python 数组添加值
【8月更文挑战第29天】
194 8
|
存储 缓存 C语言

热门文章

最新文章

推荐镜像

更多