為什麼Python list的索引從0開始

時間 2021-07-21 03:44:40

1樓:匿名使用者

python的創始人(guido van rossum)說過,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。

(注:abc語言是python的祖先之一)

guido van rossum說想其是被半開區間語法的優雅迷住了。特別是當兩個切片操作位置鄰接時,第一個切片操作的終點索引值是第二個切片的起點索引值時,太漂亮了,無法捨棄。例如,想將一個陣列以i,j兩個點切成三部分——這三部分將

會是a[:i],a[i:j]和a[:i]。

這就是為什麼python的創始人要讓python使用0-based的索引方式的原因。

python語言的創始人解釋為什麼python陣列的索引從0開始

2樓:匿名使用者

你好:為什麼從0開始;

貌似所有的陣列索引都是從0開始!

3樓:日time寸

引用python語言的創始人的解釋

最近有人在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.

但是,index:length這種方式在其它情況下適用嗎?說實話,這點我有些記不清了,但我想我是被半開區間語法的優雅迷住了。特別是當兩個切

片操作位置鄰接時,第一個切片操作的終點索引值是第二個切片的起點索引值時,太漂亮了,無法捨棄。例如,你想將一個陣列以i,j兩個點切成三部分——這三

部分將會是a[:i],a[i:j]和a[j:]。

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

python怎麼設定list的下標從1開始

4樓:暢天宇

因為在執行python指令碼的時候你沒在後面新增一個值。sys.argv[1]意思是取位置第二的引數。

位置第一的是py名字,第二的引數你沒有輸入,所以取不到,所以報錯out of range。

你執行的時候一般是這樣的:python ***.py a 其中***是程式名字,即sys.

argv[0]的位置。a是引數,即sys.argv[1]取的位置。

必須有這個a才行,要不然sys.argv[1]取不到值肯定報錯

5樓:吹花

設計一種自定義型別,把list重新封裝一層。在實現上保證初始化時原生list裡自動新增一個元素。再把其它相關的東西都加上,比如獲取列表長度等。這樣就可以實現該需求。

然而,出於標準化考慮,建議你適應列表、陣列這種索引從0開始的資料結構。畢竟大家大多數語言都是這樣預設的,除了vb6等語言有小標為1的奇怪設定。

程式設計常識13:陣列索引陣列下標為什麼要從0開始

6樓:追憶小土豆

為了更好理解,我們舉個例子:

1、陣列在記憶體中申請是,所申請的記憶體是一段連續的記憶體地址;

python 請問如何給索引從200開始的series重新設立索引,使其從0開始?

7樓:匿名使用者

python的創始人(guido van rossum)說過,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。

(注:abc語言是python的祖先之一)

guido van rossum說想其是被半開區間語法的優雅迷住了。特別是當兩個切片操作位置鄰接時,第一個切片操作的終點索引值是第二個切片的起點索引值時,太漂亮了,無法捨棄。例如,想將一個陣列以i,j兩個點切成三部分——這三部分將

會是a[:i],a[i:j]和a[:i]。

這就是為什麼python的創始人要讓python使用0-based的索引方式的原因。

為什麼要說索愛垃圾,為什麼

首先第一點 很多人都錯了。認識上的錯誤 就是索愛也就是索尼愛立信。是索尼和愛立信各控股50 的合資公司。嚴格的說 他並不是日本的 應該是屬英國。索尼愛立信公司 原世界第三大手機公司愛立信移動 2000年歐洲著名電信巨頭愛立信子公司愛立信移動連續虧損,sony ericsson由sony和ericss...

海賊王中的索隆為什麼不吃惡魔果實

該說的還是得說 拜託啊!跟鷹眼打的時候的索隆基本是廢人一個啊!現在的索隆怎樣啊?切火車如切菜,砍大樓像砍瓜!火車是鐵,樓是石頭。比木頭做的船硬上n倍!雖然現在索隆還打不過鷹眼,但最後一定行的!因為鷹眼就是索隆最終形態的參考樣本! 癢啊癢啊癢啊 額 吃兩個果實就自爆了 索隆為什麼要吃果實呢?他本身就很...

英雄聯盟亞索為什麼感覺特別特別強

淸俠 裝備 亞索的核心裝少而精煉。每出一個核心裝,輸出都是質的提升。說形象點就是,電刀無盡君王對亞索的效果就是三相對刀妹的效果,但亞索是3個核心裝,刀妹就是一個三相的提升而已。所以在每個時間段,亞索的傷害都很高。而當亞索無法在特定時間點出到特定的裝備時,傷害就不夠看了。技能 亞索的技能搭配非常合理。...