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