Skip to main content

串列的操作與運用 Part I.

· 6 min read
Charles Wang
DevOps / Backend Engineer

本篇將學習如何以迴圈來遍訪整個串列, 不管串列有多長,只需要幾行程式碼就搞定。

迴圈遍訪整個串列​

在程式設計時常需要遍訪整個串列的所有項目,並對每個項目進行相同的操作處理。

可使用Python 的 for 迴圈來完成:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)

在第二行定義for迴圈,告知Python從magicians 串列中取出名字,並將它存放到magician變數內。 在第三行告訴Python把存放在 magician變數內的名字輸出。 之後Python會對串列中的每個名稱重覆執行第二行和第三行。

alice
david
carolina

在編寫 for 迴圈時,可以取任一個合法的名字用於存放串列中每一個值的臨時變數。 不過還是建議取個具有描述性又有意義的名字是比較好的:

for magician in magicians:
for car in cars:
for item in list_of items:

這種取名的慣例有助於讓大家明白 for 迴圈中對每個項目要進行操作處理。 利用英文單字的單數和複數來命名,能協助判斷這段程式是處理單個項目還是整個串列。

在 for 迴圈中進行更多操作​

在 for 迴圈中可對每個項目執行任何的操作:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")

輸出的內容是對串列中每位魔術師都印出一條屬於他個人的訊息:

Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!

之後想在 for 迴圈中放多少行程式碼都可以,在 for magician in magicians 這行程式之後, 每行縮排的程式碼都算在迴圈之內,且都會對串列中每個項目執行一次。 接著可以新增第二行程式碼輸出另一條訊息:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")

for 迴圈結束後的處理​

在 for 迴圈之後沒有縮排的程式碼都只執行一次,不會重覆:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")

print("Thank you, everyone. That was a great magic show!")

最後一行的 print陳述句沒有縮排,它不屬於 for 迴圈,不會重覆執行,只在迴圈結束後再執行一次:

Alice, that was a great trick!
I can't wait to see your next trick, Alice.

David, that was a great trick!
I can't wait to see your next trick, David.

Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

Thank you, everyone. That was a great magic show!

使用 for 迴圈來處理資料,會發覺這是彙總整個資料集執行操作的好方法。


避免縮排的誤用​

Python會依據這行程式的縮排(indentation)來判斷與前一行程式的連結,並利用縮排讓程式變得更易讀, 基本上它就是要我們使用空白縮排來讓程式碼整齊而結構分明。 開始運用適當的縮排來編寫程式時,需要注意一些常見的縮排錯誤。

忘了縮排​

在 for 陳述句後面屬於迴圈的程式行都要縮排,如果忘了縮排,Python 會顯示錯誤訊息提醒:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)

在 for 迴圈內的print 陳述句應該要縮排卻沒有縮排,當Python 找不到縮排的程式區堆時, 會讓您知道哪一行程式碼可能有問題:

File "text.py", line 3
print(magician)
^
IndentationError: expected an indented block

只要把 for 陳述句後面的程式行或程式區塊縮排,就能修正這樣的錯誤。

忘了縮排其它程式行​

有時迴圈能執行且不會報錯,但輸出的結果不是想要的內容; 在迴圈中進行多項工作卻忘了縮排某行程式,這種情況就會發生:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")

第二條print陳述句原本要縮排,但因為已滿足Python 要 for 陳述句後至少要有一行縮排的程式行,因此執行後不會有錯誤訊息。

Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

由於magician 變數最後迴圈存放的值為carolina,因此就只印出「I can’t wait to see your next trick, Carolina.」。 這算是個邏輯錯誤(logical error)。從語法上來看都是合法的,但有邏輯上的錯誤,導致執行結果不是我們想要的。

不需要的縮排​

如果程式中不小心縮排了不需要縮排的程式行,Python 會顯示意外縮排的錯誤訊息:

File "text.py", line 2
print(message)
^
IndentationError: unexpected indent

為了避免意外縮排的錯誤,在縮排程式行時要小心。

迴圈之後不需要的縮排​

如果不小心把應在迴圈結束後才執行的程式行縮排了,該程式行就會跟著迴圈對每個串列中的項目重覆執行。 有些時候Python 會回報錯誤訊息,但大多數都是邏輯錯誤,不會顯示錯誤訊息:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")

print("Thank you, everyone. That was a great magic show!")

這是個邏輯錯誤,與前面「忘了縮排其它程式行」的錯誤相似, 如果原本設計的只應該執行顯示一次卻執行了多次,請確定是否對程式行做了不需要的縮排。

Alice, that was a great trick!
I can't wait to see your next trick, Alice.

Thank you, everyone. That was a great magic show!
David, that was a great trick!
I can't wait to see your next trick, David.

Thank you, everyone. That was a great magic show!
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

Thank you, everyone. That was a great magic show!

忘記加冒號​

在 for 陳述句尾端的冒號是用來告訴Python下一行是迴圈的開始:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)

如果忘了加冒號,就會導致語法錯誤,因為Python不知道您想要做什麼。 雖然這個簡單的錯誤很容易修正,但卻不容易發現。


其它更多關於串列的操作與運用,請看 Part II.。