7 For 迴圈
迴圈是撰寫程式相當重要的環節,它可以幫助我們省去撰寫重複內容的程式。假設我們現在想做一件事情:我們想讓 Python 輸出美國影集六人行(Friends)的六個主要演員:
print("Jennifer Aniston")
## Jennifer Aniston
print("Courteney Cox")
## Courteney Cox
print("Lisa Kudrow")
## Lisa Kudrow
print("Matt LeBlanc")
## Matt LeBlanc
print("Matthew Perry")
## Matthew Perry
print("David Schwimmer")
## David Schwimmer
或者我們可以先將這六位主要演員儲存在一個 list 中,稱為 starrings
,再利用選擇 list 中元素的方式一一輸出:
starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
print(starrings[0])
## Jennifer Aniston
print(starrings[1])
## Courteney Cox
print(starrings[2])
## Lisa Kudrow
print(starrings[3])
## Matt LeBlanc
print(starrings[4])
## Matthew Perry
print(starrings[5])
## David Schwimmer
在不撰寫迴圈的情況下,我們還是能夠慢慢地複製貼上結構類似的程式,修改一些小地方,進而完成我們想要做的事情。但這確實不是一個好方法,試想如果我們要輸出的不再只有 6 個元素,而是 66、666 個這麼多元素呢?這時我們可以求助迴圈來協助!
7.1 for 迴圈結構
一個 for
迴圈結構如下:
for i in x:
# 每次迭代執行的程式
Python 使用縮排(indent)來載明每次迭代要處理的事情,假如 x 是一個 list 或是 tuple,i
會由 x[0]
起始;當一次迭代結束,i
會更動為 x[1]
,以此類推;而在每一次迭代中,Python 都會執行縮排部分的程式。
starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
for starring in starrings:
print starring
## Jennifer Aniston
## Courteney Cox
## Lisa Kudrow
## Matt LeBlanc
## Matthew Perry
## David Schwimmer
在這個 for
迴圈中,迭代子(iterator)我們取名作 starring
,它是以文字的資料類型存在;我們也可以讓迭代子以整數的資料類型存在:
starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
for i in range(len(starrings)):
print starrings[i]
## Jennifer Aniston
## Courteney Cox
## Lisa Kudrow
## Matt LeBlanc
## Matthew Perry
## David Schwimmer
在這個迴圈中,迭代子(iterator)我們取名作 i
,它是整數由 0 起始到 5 終止,我們藉助 range()
函數產生 0 到 5。
7.1.1 不只是 print
在迴圈之中,除了單純將迭代子印出來,我們還可以做其他的事情,例如:將每個演員的 First name 改為大寫:
starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
upper_firstnames = []
for starring in starrings:
upper_name = starring.upper()
upper_firstnames.append(upper_name)
print(upper_firstnames)
## ['JENNIFER ANISTON', 'COURTENEY COX', 'LISA KUDROW', 'MATT LEBLANC', 'MATTHEW PERRY', 'DAVID SCHWIMMER']
7.2 List Comprehension
將事情變得更簡單一些:
starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
upper_firstnames = [x.upper() for x in starring]
print(upper_firstnames)
## ['D', 'A', 'V', 'I', 'D', ' ', 'S', 'C', 'H', 'W', 'I', 'M', 'M', 'E', 'R']
7.3 enumerate 函數
enumerate 函數能夠同時取用索引與元素。
starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
for i, starring in enumerate(starrings):
print("{}: {}".format(i, starring))
## 0: Jennifer Aniston
## 1: Courteney Cox
## 2: Lisa Kudrow
## 3: Matt LeBlanc
## 4: Matthew Perry
## 5: David Schwimmer
7.4 zip 函數
zip 函數能夠讓兩個迴圈平行運作。
starrings = ["Jennifer Aniston", "Courteney Cox", "Lisa Kudrow", "Matt LeBlanc", "Matthew Perry", "David Schwimmer"]
characters = ["Racheal Green", "Monica Geller", "Phoebe Buffay", "Joey Tribbiani", "Chandler Bing", "Ross Geller"]
for char, starring in zip(characters, starrings):
print("{}: {}".format(char, starring))
## Racheal Green: Jennifer Aniston
## Monica Geller: Courteney Cox
## Phoebe Buffay: Lisa Kudrow
## Joey Tribbiani: Matt LeBlanc
## Chandler Bing: Matthew Perry
## Ross Geller: David Schwimmer