在游戲中,可能需要將每個界面元素平移相同的距離;
對於包含數字的列表,可能需要對每個元素執行相同的統計運算;
在網站中,可能需要顯示文章列表中的每個標題。
經常需要遍歷列表的所有元素,對每個元素執行相同的操作。
需要對列表中的每個元素都執行相同的操作時,可使用Python中的for循環。
遍歷整個列表
假設有一個魔術師名單,需要將其中每個魔術師的名字都打印出來。為此,可以分別獲取名單中的每個名字,但這種做法會導致多個問題。
例如,如果名單很長,將包含大量重復的代碼。
另外,每當名單的長度發生變化時,都必須修改代碼。
通過使用for循環,可讓Python去處理這些問題。
下面使用for循環來打印魔術師名單中的所有名字:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
首先定義一個列表,定義一個for循環,從列表magicians中取出一個名字,並將其存儲在變量magician中。最后,打印存儲到變量magician中的名字。
>>>
alice
david
carolina
>>>
for magician in magicians:
這行代碼讓Python獲取列表magicians中的第一個值('alice' ),並將其存儲到變量magician中。
接下來,Python讀取下一行代碼:
print(magician)
它讓Python打印magician的值——依然是'alice' 。鑒於該列表還包含其他值,Python返回到循環的第一行:
for magician in magicians:
Python獲取列表中的下一個名字——'david' ,並將其存儲到變量magician 中,再執行下面這行代碼:
print(magician)
Python再次打印變量magician 的值——當前為'david' 。接下來,Python再次執行整個循環,對列表中的最后一個值——'carolina' 進行處理。
至此,列表中沒有其他的值了,因此Python接着執行程序的下一行代碼。
在這個示例中,for循環后面沒有其他的代碼,因此程序就此結束。
使用循環時,對列表中的每個元素,都將執行循環指定的步驟,而不管列表包含多少個元素。
如果列表包含一百萬個元素,Python就重復執行指定的步驟一百萬次,且通常速度非常快。
另外,編寫for 循環時,對於用於存儲列表中每個值的臨時變量,可指定任何名稱。然而,選擇描述單個列表元素的有意義的名稱大有幫助。例如,對於小貓列表、小狗列表和一般性列表,像下面這樣編寫for 循環的第一行代碼是不錯的選擇:
for cat in cats:
for dog in dogs:
for item in list_of_items:
這些命名約定有助於明白for循環中將對每個元素執行的操作。
使用單數和復數式名稱,可幫助判斷代碼段處理的是單個列表元素還是整個列表。
在for循環中,可對每個元素執行任何操作。下面來擴展前面的示例,對於每位魔術師,都打印一條消息,指出他的表演太精彩了。
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
相比於前一個示例,唯一的不同是對於每位魔術師,都打印了一條以其名字為抬頭的消息。
這個循環第一次迭代時,變量magician的值為'alice' ,因此Python打印的第一條消息的抬頭為'Alice' 。
第二次迭代時,消息的抬頭為'David' ,而第三次迭代時,抬頭為'Carolina'。
下面的輸出表明,對於列表中的每位魔術師,都打印了一條個性化消息:
>>>
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")
由於兩條print語句都縮進了,因此它們都將針對列表中的每位魔術師執行一次。
第二條print語句中的換行符"\n",在每次迭代結束后都插入一個空行,從而整潔地將針對各位魔術師的消息編組:
>>>
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.
>>>