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