Python語言的創始人解釋為什麼Python陣列的索引從0開始
最近有人在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的索引方式的原因。
相關文章
- Python 語言的創始人解釋為什麼 Python 陣列的索引從0開始Python陣列索引
- Python之父:為什麼Python陣列下標從0開始Python陣列
- 易語言陣列 ,索引從 1 開始。陣列索引
- 為什麼陣列下標是從0開始?陣列
- 【敏捷0】敏捷專案管理-為什麼從敏捷開始?為什麼從PMI-ACP開始?敏捷專案管理
- 為什麼程式要從0開始計數
- 用C++從0開始開發自己的程式語言C++
- 從零開始學Python(一):Python語言的背景,發展,以及前景.Python
- python矩陣下標從幾開始?Python矩陣
- 從0開始用python寫一個命令列小遊戲(十)Python命令列遊戲
- 從0開始用python寫一個命令列小遊戲(二)Python命令列遊戲
- 從0開始用python寫一個命令列小遊戲(六)Python命令列遊戲
- Python創始人訪談:Python沒想象中的那麼慢Python
- 從 0 開始瞭解 DockerDocker
- 為什麼 Ubuntu 放棄 Unity?創始人如是說UbuntuUnity
- Python註釋以什麼符號開始?Python基礎入門Python符號
- C語言從零開始(一)C語言
- 從零開始學PythonPython
- 從 0 開始實現程式語言(一):手寫 jsonParserJSON
- 從什麼時候開始,玩家成了遊戲裡的“工具人”?遊戲
- Python從零開始——學習Python的個人方法Python
- Python語言怎麼樣?為什麼學Python?Python
- 從0開始開發網頁,需要學什麼?(小白向)網頁
- 使用 Python 的 toolz 庫開始函數語言程式設計Python函數程式設計
- Python基礎語法:開始你的Python之旅Python
- 從零開始學C語言pdfC語言
- Google創始人的公開信Go
- 從零開始學 Python 之基礎語法Python
- python語言的優點是什麼?python開發Python
- Python是什麼?Python成為熱門語言的原因!Python
- 《從0開始學Elasticsearch》—叢集健康和索引管理Elasticsearch索引
- Python Web開發:從 wsgi 開始PythonWeb
- 程式設計師必知-程式語言創始人程式設計師
- 著名程式語言Fortran創始人貝克斯辭世
- 從零開始——GO語言基礎語法Go
- 七牛雲儲存創始人:揭開GO語言的神祕面紗Go
- 從零開始的Python爬蟲速成指南Python爬蟲
- Python是什麼語言?Python底層語言是什麼?Python