歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Python之父:為什麼Python的索引從零開始?

剛開始學習Python語言的時候,並不是很理解為什麼Python列表的索引值是從0開始的,不過卻很喜歡列表切片的語法,非常簡單、優雅。而最近在翻閱Python之父Guido老爹的Google+發文時,看到了他自己對這個問題的解釋。

下面是Guido老爹的回答。

最近有人在Twitter上問我,為什麼Python中的索引從0開始(0-based indexing),還提供了一篇關於這個話題的 文章鏈接 (文章寫的很有趣)。我記得自己就這個問題思考過很久;Python的祖先之一ABC語言,使用的索引是從1開始的(1-based indexing),而對Python語言有巨大影響的另一門語言,C語言的索引則是從0開始的。我最早學習的幾種編程語言(Algol, Fortran, Pascal)中的索引方式,有的是1-based的,有的是從定義的某個變量開始(variable-based indexing)。而我決定在Python中使用0-based索引方式的一個原因,就是切片語法(slice notation)。

讓我們來先看看切片的用法。可能最常見的用法,就是“取前n位元素”或“從第i位索引起,取後n位元素”(前一種用法,實際上是i==起始位的特殊用法)。如果這兩種用法實現時可以不在表達式中出現難看的+1或-1,那將會非常的優雅。

使用0-based的索引方式、半開區間切片和缺省匹配區間的話(Python最終采用這樣的方式),上面兩種情形的切片語法就變得非常漂亮:a[:n]和a[i:i+n],前者是a[0:n]的縮略寫法。

如果使用1-based的索引方式,那麼,想讓a[:n]表達“取前n個元素”的意思,你要麼使用閉合區間切片語法,要麼在切片語法中使用切片起始位和切片長度作為切片參數。半開區間切片語法如果和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索引方式是從零開始的。

下面關於Python的文章您也可能喜歡,不妨看看:

Linux下Python的安裝以及注意事項  http://www.linuxidc.com/Linux/2015-11/124861.htm

Ubuntu 14.04 下安裝使用Python rq模塊  http://www.linuxidc.com/Linux/2015-08/122441.htm

無需操作系統直接運行 Python 代碼  http://www.linuxidc.com/Linux/2015-05/117357.htm

CentOS上源碼安裝Python3.4  http://www.linuxidc.com/Linux/2015-01/111870.htm

《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm

Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡 

Copyright © Linux教程網 All Rights Reserved