python 訪問列表元素

2021-09-15 14:53 更新

練習(xí)34.訪問列表元素

列表的用處很大,但只有你能訪問里邊的內(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ù)字的方式做對(duì)比。

假設(shè)你在觀看上面列表中的四種動(dòng)物 (['bear', 'tiger', 'penguin', 'zebra']) 賽跑。 而它們比賽的名詞正好跟列表里的次序一樣。這是一場(chǎng)很激動(dòng)人心的比賽,因?yàn)檫@些動(dòng)物沒打算吃掉對(duì)方,而且比賽還真的舉辦起來了。結(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è)元素來。對(duì)程序員來說,上述的列表更像是一疊卡片如果他們想要 tiger,就抓它出來,如果想要zebra,也一樣抓取出來。要隨機(jī)地抓取列表里的內(nèi)容,列表的每一個(gè)元素都應(yīng)該有一個(gè)地址,或者一個(gè)“index(索引)”,而最好的方式是使用以0開頭的索引。相信我說的這一點(diǎn)吧,這種方式獲取元素會(huì)更容易。這類的數(shù)字被稱為“基數(shù)(cardinal number)”,它意味著你可以任意抓取元素,所以我們需要一個(gè) 0 號(hào)元素。

那么,這些知識(shí)對(duì)于你的列表操作有什么幫助呢?很簡(jiǎn)單,每次你對(duì)自己說“我要第 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),你只要直接使用即可。

animals = ['bear', 'python', 'peacock', 'kangaroo', 'whale', 'platypus']
The animal at 1.
The third (3rd) animal.
The first (1st) animal.
The animal at 3.
The fifth (5th) animal.
The animal at 2.
The sixth (6th) animal.
The animal at 4.

對(duì)于上述每一條,以這樣的格式寫出一個(gè)完整的句子:“The 1st animal is at 0 and is a bear.” 然后倒過來念:“The animal at 0 is the 1st animal and is a bear.”

使用 python 檢查你的答案。

附加題

  1. 以你對(duì)于這些不同的數(shù)字類型的了解,解釋一下為什么 “January 1, 2010” 里是 2010 而不是 2009?(提示:你不能隨機(jī)挑選年份。)
  2. 再寫一些列表,用一樣的方式作出索引,確認(rèn)自己可以在兩種數(shù)字之間互相翻譯。
  3. 使用 python 檢查自己的答案。

Warning:會(huì)有程序員告訴你讓你去閱讀一個(gè)叫“Dijkstra”的人寫的關(guān)于數(shù)字的話題。我建議你還是不讀為妙。除非你喜歡聽一個(gè)在編程這一行剛興起時(shí)就停止從事編程的人對(duì)你大喊大叫。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)