iT邦幫忙

2022 iThome 鐵人賽

DAY 2
0

為什麼需要列表(List)?

當你有很多筆資料,而且他們都有一樣或是類似的性質時,我們會將他們組織成一個資料結構。
而在這裡,我們使用 List

生活範例

身為一個小老師,你要幫老師計算全班30人的數學科平均,你會怎麼做?
方法一:土法煉鋼(小算盤還更快)

Bob = 80
Tom = 60
...
print((Bob + Tom + ...) / 30)

方法二:List

score = [80, 60, ...]
print(sum(score)/30)

這裡的「相同性質」是什麼,除了這些資料代表分數,他們都是數字(int, float)


前進語法

字串最顯眼的地方是''""列表最顯眼的地方是[]!
所有要被放進列表的元素都會被放在中括號 [] 之內。

# listName = [value1, value2, ...]
myFirstList = [True, 'Python', 0.01]
emptyList = []

接下來就從三個觀點來看列表:

  1. length 長度(列表有幾個元素)
  2. value 值(列表裝什麼)
  3. index 索引值(元素的編號)

Length 長度

想知道他有幾個元素並不難,就數出來就好了!
[True, 'Python', 0.01] 這個列表很明顯就有三個元素,所以他的長度是3

加深一點難度,[[True, 'Python', 0.01], 100, "8.8"]這個列表的長度呢?
其實答案是三個,三個元素分別為[True, 'Python', 0.01], 100, "8.8"

除了用數的,還有什麼方法可以知道他的長度?
那就來介紹列表的第一個方法(method)吧!

語法:len(listName)

  • 參數可以放置一個列表或是列表變數
  • 回傳值是一個整數
    空列表的長度為 0
# Example 1
list1 = [1, 2, 3, 4]
print(len(list1))

# Example 2
list2 = [[True, 'Python', 0.01], 100, "8.8"]
lenOfList2 = len(list2)

# Example 3
lenOfList3 = len([1, 2, 3, 4])

# Example 4
print(len([]))

Value 值

從上方的例子來看,列表的元素並不強制要相同的資料型態。

但是一般來說,一個列表我們會放置相同資料型態的資料,例如:一個列表score用來放整數資料;一個列表name用來放字串資料。因為放置在同一個列表的資料通常具有一定的關聯性!

score = [60, 80, 70, 45]
name = ['Bob', 'Tom', 'John']

Index 索引值

知道了列表內容,再來就是如何調用列表的元素。

想像列表是一個大櫃子,櫃子上有很多抽屜,抽屜上有編號。
索引值就相當於抽屜上的編號,且這些編號是由 0 開始,編號最大的數字為 length - 1

假設有一個列表為 myList = ['Bob', 60, 'Tom', 80]
編號0的元素為 'Bob' ,通常表示為 myList[0]
編號1的元素為 60 ,通常表示為 myList[1]
編號2的元素為 'Tom' ,通常表示為 myList[2]
編號3的元素為 80 ,通常表示為 myList[3]

如果調用到範圍外的索引值,會如何?
IndexError: list index out of range 代表你碰到不該碰的東西

小補充:
Python 提供負數索引值。
編號 -1的元素即是編號 length - 1的元素
最小至編號

練習一下:
下列程式碼的輸出為何?

myList = [[1, 2, ["Apple", "Banana"]], []]
print(myList[0][2][0])
print(myList[0][1])
print(len(myList[1]))
print(len(myList[0][2]))

答:

Apple
2
0
2

更改列表內容

使用索引值來更改列表內容!
前提是這個索引值必須是在合理範圍內。

  1. 透過索引值找到列表的元素
  2. 將新的數值賦值給該元素

舉個例子:

myList = [1,2,3,4,5]
for element in myList:
    print(element, end = " ")
myList[2] = 100
for element in myList:
    print(element, end = " ")

可以從輸出看出差別。


列表結合迴圈

使用 for 迴圈印出列表元素

方法一:使用索引值

myList = ['Bob', 60, 'Tom', 80]
for idx in range(len(myList)):
    print(myList[idx], end = ' ')

方法二:迭代列表元素

myList = ['Bob', 60, 'Tom', 80]
for element in myList:
    print(element, end = ' ')

這兩個方法在這個實例來說是一樣的。


迭代

上述兩個迴圈其實都有用到迭代的技巧,只是被迭代的內容不相同。
方法一中,被迭代的是range函式產生出的一串數字;方法二中,被迭代的是列表的元素。

迭代是什麼意思?

做個比喻:
現在你旁邊的佈告欄上貼有一串資料,而你手中只有很多張紙片跟筆(紙片大小只夠你抄寫一筆數字)。
你會拿出一張紙,將「一筆」資料抄在你的紙上。

程式的世界:
佈告欄:列表|資料:列表元素|一張紙片:一塊記憶體/一個變數
拿出一張紙:調用一塊記憶體或宣告一個變數
抄寫:賦值給變數

一個小問題:
從結果來看,「迭代用的變數」跟「列表中的元素」有一樣的數值。如果將迭代用的變數的數值更改為字串'Hello',列表元素的數值會有所變化嗎?
答案是不會。因為這兩個變數並不相干,這件事情就像把紙片上的資料塗改後,佈告欄上的資料不會因此改變啊!

觀念測試

下面哪一個程式會讓列表中的數值都變為原本的10倍?

選項一:

myList = [1, 2, 3, 4]
for idx in range(len(myList)):
    myList[idx] *= 10

選項二:

myList = [1, 2, 3, 4]
for element in myList:
    element *= 10

答案是「選項一」!


經過這些內容,相信大家對列表都有基本的認識了!
迭代也是一個很常見的用法,但是要特別注意迭代的對象是誰,因為這個影響很大。
下一篇來進一步介紹列表的相關方法。


上一篇
[Day 01] 闖進Python異世界 - 聽過收納箱嗎?
下一篇
[Day 03] 闖進Python異世界 - Methods of List
系列文
闖進Python異世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言