Python 入門教程/元組、列表、字典
上一課的內容讓你頭疼嗎?別擔心,這一課會簡單一些。我們將回到一個簡單的東西——變數——但更深入一些。
想想看——變數儲存了一段資訊。它們可以隨時吐出這段資訊,而且它們的資訊可以隨時更改。變數在它們所做的事情上很出色——儲存一個可能隨著時間推移而改變的資訊片段。
但是如果你需要儲存一個很長的資訊列表,並且這個列表隨著時間的推移不會改變呢?例如,一年中月份的名稱。或者可能是一個很長的資訊列表,它隨著時間的推移而改變?例如,你所有貓的姓名。你可能會得到新的貓,有些貓可能會死,有些貓可能會跑掉。電話簿呢?為此,你需要做一些引用——你將有一個姓名列表,並且與每個姓名相關聯的是一個電話號碼。你怎麼做呢?
針對這三個問題,Python 使用了三種不同的解決方案——列表、元組和字典。
- 列表正如它們所顯示的那樣——一組值。它們中的每一個都有一個編號,從零開始——第一個編號為零,第二個為 1,第三個為 2,等等。你可以從列表中刪除值,並在末尾新增新值。例如:你很多貓的名字。
- 元組就像列表,但你不能更改它們的值(在程式設計師術語中稱為不可變)。你最初給它的值,就是你在這段程式的剩餘時間裡必須堅持的值。同樣,每個值從零開始編號,以便於參考。例如:一年中月份的名稱。
- 字典類似於它們的名稱所暗示的那樣——一個字典。在一個字典中,你有一個單詞的“索引”,並且每個單詞都對應一個定義。在 Python 中,單詞稱為“鍵”,定義稱為“值”。字典中的值沒有編號——它們也沒有特定的順序——鍵起到相同的作用。(但是每個鍵必須是唯一的!)你可以新增、刪除和修改字典中的值。例如:電話簿。
元組很容易建立。你給元組起一個名字,然後在其後加上它將承載的值列表。例如,一年中的月份
- 程式碼示例 1 - 建立一個元組
months = ('January','February','March','April','May','June',\
'July','August','September','October','November','December')
注意第一行末尾的“\”符號將該行程式碼延續到下一行。這是一種使長行更易讀的有用方法。從技術上講,你不需要在括號中新增這些括號(“(”和“)”符號),但這可以防止 Python 混淆。你可以在逗號後新增空格,如果你覺得有必要——它並不重要。然後,Python 會將這些值按順序整理在一個方便的編號索引中——從零開始,按照你在其中輸入的順序。它將按以下方式整理
| 索引 | 值 |
|---|---|
| 0 | 一月 |
| 1 | 二月 |
| 2 | 三月 |
| 3 | 四月 |
| 4 | 五月 |
| 5 | 六月 |
| 6 | 七月 |
| 7 | 八月 |
| 8 | 九月 |
| 9 | 十月 |
| 10 | 十一月 |
| 11 | 十二月 |
這就是元組!非常簡單……
列表與元組非常相似。列表是可修改的(或者程式設計師可能說“可變的”),因此它們的值可以更改。大多數情況下我們使用列表,而不是元組,因為如果需要,我們希望輕鬆地更改值。
列表的定義與元組非常相似。假設你有五隻貓,分別叫湯姆、斯內皮、基蒂、傑西和切斯特。要將它們放在一個列表中,你需要這樣做
- 程式碼示例 2 - 建立一個列表
cats = ['Tom', 'Snappy', 'Kitty', 'Jessie', 'Chester']
正如你所看到的,程式碼與元組完全相同,除了所有值都放在方括號中,而不是圓括號中。同樣,你不需要在逗號後新增空格,但它確實使它更易讀。
你從列表中檢索值的方 式與你在元組中完全相同。例如,要列印你第三隻貓的名字,你需要這樣做
- 程式碼示例 3 - 從列表中檢索專案
print(cats[2])
你還可以檢索一系列示例,例如上面示例中的——cats[0:2] 將返回你第一隻和第二隻貓,或者換句話說,該表示式將返回第零個元素和第一個元素,並將停止在第二個元素。輸出將如下所示
>>> ['Tom', 'Snappy']
列表的真正用武之地在於它們如何可以被修改。要向列表新增一個值,你使用append()函式。假設你得到了一隻名叫凱瑟琳的新貓。要將她新增到列表中,你需要這樣做
- 程式碼示例 4 - 向列表新增專案
cats.append('Catherine')
這有點奇怪,不是嗎?我會解釋。該函式位於一個奇怪的位置——在一個句點之後,在列表名稱之後。你將在以後的課程中更多地瞭解這些內容。目前,這是將新值新增到列表中的函式形式
- 程式碼示例 5 - 使用 append 函式
#add a new value to the end of a list:
list_name.append(value_to_add)
#e.g. to add the number 5038 to the list 'numbers':
numbers.append(5038)
情況更清楚了嗎?很好!
現在讓我們來看看一個悲傷的情況——斯內皮跑掉了。你需要從列表中刪除他(或她)。幸運的是,刪除那隻可憐的貓是一件容易的事,所以你必須儘快擺脫悲傷
- 程式碼示例 6 - 刪除一個專案
#Remove your 2nd cat, Snappy. Woe is you.
del cats[1]
你剛剛刪除了列表中的第二隻貓——可憐的斯內皮。
帶著這個令人沮喪的資訊,讓我們繼續學習……
好吧,生活中除了你貓的名字還有更多東西。你需要給你姐姐、母親、兒子、水果商以及其他需要知道他們最喜歡的貓跑掉的人打電話。
現在,我們上面使用的列表並不適合電話簿。你需要根據某人的姓名來了解號碼——而不是反過來,就像我們對貓所做的那樣。在月份和貓的示例中,我們給計算機一個數字,它給了我們一個名字。這次,我們想要給計算機一個名字,它給我們一個數字。為此,我們需要字典。
那麼我們如何建立字典呢?把你的裝訂裝置收起來,它沒有那麼先進。
記住,字典有鍵和值。在電話簿中,你有人們的姓名,然後是他們的號碼。看到相似之處了嗎?
當你最初建立字典時,它非常類似於建立元組或列表。元組有(和)東西,列表有[和]東西。猜猜看!字典有{和}東西——花括號。下面是一個示例,展示了一個包含四個電話號碼的字典
- 程式碼示例 7 - 建立一個字典
#Make the phone book:
phonebook = {'Andrew Parson':8806336, \
'Emily Everett':6784346, \
'Peter Power':7658344, \
'Lewis Lame':1122345}
#Prints the value for the key Lewis Lame
print phonebook['Lewis Lame']
然後,程式將在螢幕上列印劉易斯·萊姆的號碼。注意,我們不是透過數字來標識值,就像在貓和月份示例中一樣,而是透過另一個值來標識值——在本例中是人的姓名。
好的,你建立了一個新的電話簿。現在你想向電話簿中新增新的號碼。你會怎麼做?一行非常簡單的程式碼
- 程式碼示例 8 - 向字典新增條目
#Add the person 'Gingerbread Man' to the phonebook:
phonebook['Gingerbread Man'] = 1234567
# Didn't think I would give you
# my real number now, would I?
這行程式碼只是說在電話簿中有一個名叫薑餅人的人,他的號碼是 1234567。換句話說——鍵是“薑餅人”,值是 1234567。
你像在列表中一樣刪除字典中的條目。假設安德魯·帕森是你的鄰居,並且射殺了你的貓。你再也不想和他說話了,因此不需要他的號碼。就像在列表中一樣,你需要這樣做
- 程式碼示例 9 - 從字典中刪除條目
del phonebook['Andrew Parson']
同樣,非常簡單。“del”運算子刪除列表或字典中的任何函式、變數或條目(字典中的條目只是一個帶有數字或文字字串作為名稱的變數。這在後面會派上用場。)
還記得我們對列表使用的 append 函式嗎?好吧,有很多這樣的函式可以與字典一起使用。下面,我將為你編寫一個程式,它將包含其中的一些函式。它將附帶一些註釋,解釋它是如何工作的。
將該程式輸入 Python IDLE(你可以跳過註釋)。隨意嘗試它。在看到以>>>開頭的行的地方輸入它。
- 程式碼示例 10 - 字典的函式
#A few examples of a dictionary
#First we define the dictionary
#it will have nothing in it this time
ages = {}
#Add a couple of names to the dictionary
ages['Sue'] = 23
ages['Peter'] = 19
ages['Andrew'] = 78
ages['Karren'] = 45
#Use the function has_key() -
#This function takes this form:
#dictionary_name.has_key(key-name)
#It returns TRUE
#if the dictionary has key-name in it
#but returns FALSE if it doesn't.
#Remember - this is how 'if' statements work -
#they run if something is true
#and they don't when something is false.
if 'Sue' in ages:
print("Sue is in the dictionary. She is", ages['Sue'], "years old")
else:
print("Sue is not in the dictionary")
#Use the function keys() -
#This function returns a list
#of all the names of the keys.
#E.g.
print("The following people are in the dictionary:", ages.keys())
#You could use this function to
#put all the key names in a list:
keys = ages.keys()
#You can also get a list
#of all the values in a dictionary.
#You use the values() function:
print ("People are aged the following:", ages.values())
#Put it in a list:
values = ages.values()
#You can sort lists, with the sort() function
#It will sort all values in a list
#alphabetically, numerically, etc...
#You can't sort dictionaries -
#they are in no particular order
print(keys)
print(sorted(keys))
print(values)
print(sorted(values))
#You can find the number of entries
#with the len() function:
print ("The dictionary has", len(ages), "entries in it")