Python語言的創始人解釋為什么Python數組的索引從0開始

jopen 11年前發布 | 7K 次閱讀 Python

Python語言的創始人解釋為什么Python數組的索引從0開始

        英文原文:why Python uses 0-based indexing

        最近有人在 推ter 是問我為什么 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@in。(參看 http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS

        但是,index:length 這種方式在其它情況下適用嗎?說實話,這點我有些記不清了,但我想我是被半開區間語法的優雅迷住了。特別是當兩個切片操作位置鄰接時,第一個切片操作的終 點索引值是第二個切片的起點索引值時,太漂亮了,無法舍棄。例如,你想將一個數組以i,j兩個點切成三部分——這三部分將會是a[:i]a[i:j]a[j:]

        這就是為什么我要讓 Python 使用0-based 的索引方式的原因。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!