列表的用處很大,但只有你能訪問(wèn)里邊的內(nèi)容時(shí)它才能發(fā)揮出作用來(lái)。你已經(jīng)學(xué)會(huì)了按順序讀出列表的內(nèi)容,但如果你要得到第 5 個(gè)元素該怎么辦呢?你需要知道如何訪問(wèn)列表中的元素。訪問(wèn)第一個(gè)元素的方法是這樣的:
animals = ['bear', 'tiger', 'penguin', 'zebra']
bear = animals[0]
你定義一個(gè) animals 的列表,然后你用 0 來(lái)獲取第一個(gè)元素?! 這是怎么回事???因?yàn)閿?shù)學(xué)里邊就是這樣,所以 Python 的列表也是從 0 開(kāi)始的。雖然看上去很奇怪,這樣定義其實(shí)有它的好處,而且實(shí)際上設(shè)計(jì)成 0 或者 1 開(kāi)頭其實(shí)都可以,
最好的解釋方式是將你平時(shí)使用數(shù)字的方式和程序員使用數(shù)字的方式做對(duì)比。
假設(shè)你在觀看上面列表中的四種動(dòng)物(['bear', 'tiger', 'penguin', 'zebra']) 的賽跑,而它們比賽的名詞正好跟列表里的次序一樣。這是一場(chǎng)很激動(dòng)人心的比賽,因?yàn)檫@些動(dòng)物沒(méi)打算吃掉對(duì)方,而且比賽還真的舉辦起來(lái)了。結(jié)果你的朋友來(lái)晚了,他想知道誰(shuí)贏了比賽,他會(huì)問(wèn)你“嘿,誰(shuí)是第 0 名”嗎?不會(huì)的,他會(huì)問(wèn)“嘿,誰(shuí)是第 1 名?”
這是因?yàn)閯?dòng)物的次序是很重要的。沒(méi)有第一個(gè)就沒(méi)有第二個(gè),沒(méi)有第二個(gè)也沒(méi)有第三個(gè)。第零個(gè)是不存在的,因?yàn)榱愕囊馑际鞘裁炊紱](méi)有?!笆裁炊紱](méi)有”怎么贏比賽嘛,完全不合邏輯。這樣的數(shù)字我們稱(chēng)之為“序數(shù)(ordinal number)”,因?yàn)樗鼈儽硎镜氖鞘挛锏捻樞颉?/p>
而程序員不能用這種方式思考問(wèn)題,因?yàn)樗麄兛梢詮牧斜淼娜魏我粋€(gè)位置取出一個(gè)元素來(lái)。對(duì)程序員來(lái)說(shuō),上述的列表更像是一疊卡片。如果他們想要 tiger,就抓它出來(lái),如果想要zebra,也一樣抓取出來(lái)。要隨機(jī)地抓取列表里的內(nèi)容,列表的每一個(gè)元素都應(yīng)該有一個(gè)地址,或者一個(gè) “index(索引)”,而最好的方式是使用以 0 開(kāi)頭的索引。相信我說(shuō)的這一點(diǎn)吧,這種方式獲取元素會(huì)更容易。這類(lèi)的數(shù)字被稱(chēng)為“基數(shù)(cardinal number)”,它意味著你可以任意抓取元素,所以我們需要一個(gè) 0 號(hào)元素。
那么,這些知識(shí)對(duì)于你的列表操作有什么幫助呢?很簡(jiǎn)單,每次你對(duì)自己說(shuō)“我要第 3 只動(dòng)物”時(shí),你需要將“序數(shù)”轉(zhuǎn)換成“基數(shù)”,只要將前者減 1 就可以了。第 3 只動(dòng)物的索引是 2,也就是 penguin。由于你一輩子都在跟序數(shù)打交道,所以你需要用這種方式來(lái)獲得基數(shù),只要減 1 就都搞定了。
記住: ordinal == 有序,以 1 開(kāi)始;cardinal == 隨機(jī)選取, 以 0 開(kāi)始。
讓我們練習(xí)一下。定義一個(gè)動(dòng)物列表,然后跟著做后面的練習(xí),你需要寫(xiě)出所指位置的動(dòng)物名稱(chēng)。如果我用的是“1st, 2nd”等說(shuō)法,那說(shuō)明我用的是序數(shù),所以你需要減去 1。如果我給你的是基數(shù)(0, 1, 2),你只要直接使用即可。 .. code-block:: python
animals = [‘bear’, ‘python’, ‘peacock’, ‘kangaroo’, ‘whale’, ‘platypus’]
對(duì)于上述每一條,以這樣的格式寫(xiě)出一個(gè)完整的句子:“The 1st animal is at 0 and is a bear.” 然后倒過(guò)來(lái)念:“The animal at 0 is the 1st animal and is a bear.”
使用 python 檢查你的答案。
Warning
會(huì)有程序員告訴你讓你去閱讀一個(gè)叫“Dijkstra”的人寫(xiě)的關(guān)于數(shù)字的話題。我建議你還是不讀為妙。除非你喜歡聽(tīng)一個(gè)在編程這一行剛興起時(shí)就停止從事編程了的人對(duì)你大喊大叫。