大爽Python入門教程 2-1 認識容器
大爽Python入門公開課教案
點選檢視教程總目錄
1 什麼是容器
先思考這樣一個場景:
有五個學生,姓名分別為:
Alan, Bruce, Carlos, David, Emma.
需要給他們都打一遍招呼。
即按照以下格式輸出一遍
hello, Alan!
hello, Bruce!
hello, Carlos!
hello, David!
hello, Emma!
如果一個一個print,程式碼重複度太高,且後續每多一個學生,需要跟著增加一行print。
20個學生就需要20行程式碼,100個學生就需要100行程式碼,
這樣的程式碼是很糟糕的。
回顧第一章,我們可能能想到使用迴圈。
但是由於每個學生都有自己的名字,這些名字一般是不同的字串,
所以不能直接使用第一章學到的for i in range(n)
那麼我們希望怎樣一種迴圈?
我們希望:
有多少個學生,迴圈就執行多少次,
同時第幾次迴圈中,我們能知道第幾個學生的姓名資訊。
實際上,
這會被分成兩步去實現,
有一個東西,去存放學生的姓名資訊。
使用迴圈,遍歷(依次獲取)這個東西里面存放的資訊。
這樣一種能存放其他變數資訊的東西,稱為容器。
python裡面最常用的三種容器:
- 列表(
list
) - 元組(
tuple
) - 字典(
dict
,dictionary)
2 列表list
先回到我們剛才描述的場景,
對這個場景而言,選擇列表list
做為容器是最好的。
程式碼如下
# 首先,新建一個存放學生的姓名資訊的容器,容器名為names names = ["Alan", "Bruce", "Carlos", "David", "Emma"] for name in names: # 遍歷容器:依次獲取學生姓名資訊 print("hello, %s!" % name)
#
後面都為註釋,
執行程式碼時,註釋是不執行的。
註釋主要是用來解釋說明程式碼的用意。
方便別人看懂(也方便自己看懂)
列表基礎
- 列表用
[]
來表示,內部存放的資料,稱為項(item)或者元素(element),不同元素用,
分隔。 - 可以使用
for ... in ...
來遍歷列表裡面的元素(依次獲取全部元素資訊) - 列表使用
append(item)
方法來新增新元素 - *列表內部的元素可以是不同的型別,但一個列表通常會存放相同型別的資料(不同型別的資料一般會分開存放)。
- *列表是有序的。
- *列表的型別為
list
。
使用示例
>>> names = ["Alan", "Bruce", "Carlos"] >>> type(names) <class 'list'> >>> for name in names: ... print(name) ... Alan Bruce Carlos >>> names.append("David") >>> names ['Alan', 'Bruce', 'Carlos', 'David'] >>> for name in names: ... print(name) ... Alan Bruce Carlos David
3 場景拓展
更近一步,假設這五個學生的數學成績分別為:
90, 80, 85, 92, 81.
需要按以下格式展示他們的姓名和成績,
Alan, your's math score is 90.
Bruce, your's math score is 80.
Carlos, your's math score is 85.
David, your's math score is 92.
Emma, your's math score is 81.
這個問題,有多種解決思路。
4 元組tuple
一種思路是,使用元組作為子容器
把每個學生的名字和分數一起放在一個元組裡,
看作每個學生的個人資訊,再把每個學生的個人資訊(名字和分陣列成的元組)放到列表裡面。
程式碼如下
info_list = [
("Alan", 90),
("Bruce", 80),
("Carlos", 85),
("David", 92),
("Emma", 81),
]
for info in info_dict:
name, score = info
print("%s, your's math score is %s." % (name, score))
元組基礎
- 元組用
()
來表示,內部存放的資料,稱為項(item)或者元素(element),不同元素用,
分隔。 - 元組和列表很像,不過元組是不可變物件,不能新增、修改或刪除項。
所以一般定義了一個元組,元組元素的數量就是固定的,
所以可以直接用相同的固定數量的變數來承接元組中的項。 - *列表的型別為
list
。
使用示例
>>> info = ("Alan", 90)
>>> type(info)
<class 'tuple'>
>>> name, score = info
>>> name
'Alan'
>>> score
90
>>> for item in info:
... print(item)
...
Alan
90
補充說明:一般定義了一個元組,元組元素的數量就是固定的,
所以可以直接用相同的固定數量的變數來承接元組中的項。
其實列表也可以用同等數量的變數來承接列表的所有元素。
但是列表的元素數量是可變的,即數量是不固定的,所以一般不這麼做。
一般不用for迴圈來取元組的值,而是直接用同樣個數的變數來取。
5 字典dict
另一種思路是,使用字典作為容器。
那麼學生的名字和分數就是一一對應的關係。
程式碼如下
info_dict = {
'Alan': 90,
'Bruce': 80,
'Carlos': 85,
'David': 92,
'Emma': 81
}
for name in info_dict:
score = info_dict[name]
print("%s, your's math score is %s." % (name, score))
補充說明:原本python的字典是無序的(目前很多老教程也是這麼說的),
那麼這個輸出的順序不能保證一致,可能是亂的。
不過python3.6以後,字典就改成有序的了(遵循先後順序,也叫插入順序),
所以這個輸出是完全符合的。
字典基礎
-
字典用
{}
來表示,內部存放鍵值對,鍵值對內部用:
分隔鍵與值,即key: value
,不同鍵值對用,
分隔。 -
可以使用
for ... in ...
來遍歷字典裡面的鍵(依次獲取全部鍵) -
字典的鍵的型別,只能為字串、數字、元組。
-
字典的鍵是唯一的,不能重複。
-
字典的值的型別,可以為任何型別。
-
字典的鍵可以是不同的型別,值也可以是不同的型別,但通常,一個字典的鍵會使用相同型別,值也使用相同型別。
-
字典通過
dict[key]
來取值,dict[key]=value
賦值(如果key
已存在就是修改值)。
使用示例
>>> info_dict = {
... 'Alan': 90,
... 'Bruce': 80
... }
>>> type(info_dict)
<class 'dict'>
>>> info_dict['Alan']
90
>>> for key in info_dict::
... print(key)
...
Alan
Bruce
>>> for key in info_dict::
... print(info_dict[key])
...
90
80
>>> info_dict['Carlos'] = 85
>>> info_dict
{'Alan': 90, 'Bruce': 80, 'Carlos': 85}
>>> info_dict['Bruce'] = 88
>>> info_dict
{'Alan': 90, 'Bruce': 88, 'Carlos': 85}
6 容器簡單比較
上一部分說到過,容器是一種能存放其他變數資訊的東西。
實際上,容器存放的是,資料與資料關係。
字典中的資料是對應關係。
列表中的資料是先後順序關係。
元組中的資料是一個固定的小組的關係。
不同的場景,使用的資料的關係不同,
解決對應需求的容器往往也不同。