前言
在看了上一篇列表簡介之後,你應該對列表有了初步的瞭解,知道了怎麼創建和操作列表元素。不知道你有沒有想過,上篇文章的操作列表元素是基於“我們已經知道列表元素內容和列表元素數量很少”的前提下,如果現在有個列表,我們不知道它有多少個元素,或者列表中含有一百萬個以上的元素我們怎麼對其進行操作?
在本文中,你將學習如何遍歷整個列表,遍歷列表就是循環操作列表中的每個元素,這在Python中只需要幾行代碼,非常的easy!
1. 遍歷整個列表
事實上,我們經常需要循環列表並對其中每個元素執行相同的操作。
比如,我們有個魔術師名單,現在需要你講其中每個魔術師的名字都打印出來。
名單如下:
magicians = ['Kelvin', 'Vicky', 'Howord']
你看到這個名單以後肯定覺得
於是你吭哧吭哧地寫了起來,運行前面你學到的知識,你寫出來的代碼是這樣的:
magicians = ['Kelvin', 'Vicky', 'Howord']
print(magicians[0])
print(magicians[1])
print(magicians[2])
運行這段代碼,結果如圖1-1:
表面上看你得到了正確的結果,當然,實際上你得到的也是正確的結果。
但是我們說,這樣寫的代碼並不好,爲什麼?因爲它不夠健壯、不夠靈活。
現在如果我改需求(產品經理上身):魔術師名單上有100位魔術師,現在需要你把每個魔術師的名字打印出來,你就要寫 print(magicians[0]) ~ print(magicians[99])
100遍。
我要是再喪心病狂地讓你在魔術師名字前加上 hello,你就要改100遍代碼。
可能對有些耐心極好的人來說,100遍也可以接收。
那我列表如果是1000個人、10000個人、100000個人呢?還可能更多。相信就算是如來佛祖來了都受不了。
扯了這麼一大堆,是想說明一點:如果列表中元素執行相同的操作,用循環簡直能讓人增壽。
下面用 for
循環來打印魔術師名單中的所有名字:
magicians = ['Kelvin', 'Vicky', 'Howord']
for magician in magicians:
print(magician)
運行這段代碼,結果圖1-2和圖1-1一樣:
結果是一樣的,不一樣的是:倘若將來列表中魔術師變成了一百萬甚至一千萬個,for
循環的代碼一點都不需要改變,是不是很棒?!haha~
如果有人再桑心病狂地讓你在每個魔術師名字前加上 hello,你只需要把上面的第三行代碼改成 print("Hello, " + magician)
就可以了,不管魔術師有多少個,只需要改一行。
好了,現在我來解釋一下 for
循環代碼:首先,我們定義了一個列表,這個在之前的文章講過,不懂的可以看我之前的文章或者關注公衆號 猿天罡 ;接下來,我們定義了一個 for
循環,看第二行代碼,這行代碼讓Python從列表 magicians
中取出一個名字,並將其存儲在變量 magician
中;最後我們讓 Python 打印前面存儲到變量 magician
中的名字。對於列表中的每個名字,Python都將重複執行第二行和第三行的代碼。
2. 深入地研究循環
循環這種概念很重要,因爲它是讓計算機自動完成重複工作的常見方式之一。
讓我們再把上面的 for
循環拿出來講講其中的語法和語義:
在前面的打印魔術師名單的簡單循環中,Python首先讀取其中的第一行代碼:
for magician in magicians:
這行代碼讓 Python 獲取列表 magicians
中的第一個值 Kelvin
,並將其存儲到變量 magician
中。接下來, Python 讀取下一行代碼:
print(magician)
它讓 Python 打印 magician
的值——當然是 Kelvin
。
因爲該列表還包含其他值, 循環沒有執行完,所以 Python 返回到循環的第一行:
for magician in magicians:
Python 獲取列表中下一個魔術師的名字 Vicky
,並將其存儲到變量 magician
中,再執行下面這行代碼:
print(magician)
Python 再次打印變量 magician
中的值——此時是 Vicky
。接下來, Python 再次執行整個循環,對列表最後一個值—— Howord
進行處理。
至此,列表中沒有其他的值了,因此 Python 接着執行下一行代碼。
在舉的栗子中,for
循環後面沒有其他的代碼,因此程序就此結束。
注意事項:
- 使用循環時,對列表中的每一個元素,都將執行循環指定的步驟(如栗子裏的,
print(magician)
),而不管列表包含多少個元素。如果列表包含一百萬個元素,Python 就重複執行指定的步驟一百萬次,且通常執行的速度非常快,不信你可以試試。 - 編寫
for
循環時,對於用於存儲列表中每個值的臨時變量(如栗子裏的,magician
),可隨意取名。但我們建議取有意義的名稱,別人看代碼的時候好理解。
3. 在 for
循環中執行更多的操作
在 for
循環中,可對每個元素執行任何操作。
比如,我們有個魔術師列表,現在需要你對於每個魔術師打印一條信息,指出他們的表演很精彩:
magicians = ['Kelvin', 'Vicky', 'Howord']
for magician in magicians:
print(magician.title() + ", your trick is amazing!")
運行這段代碼,結果如圖3-1:
相比於前一個示例,唯一不同的是對於每位魔術師,都打印了一條以其名字開頭的消息。
在 for
循環中,想包含多少行代碼都可以。
在代碼 for magician in magicians:
後面,每個縮進的代碼行都是循環的一部分,並且對列表中的每個元素都執行一次。
因此,可對列表中每個值執行任意次數的操作。
舉例說明,在上面示例的基礎上,告訴每個魔術師,你期待他的下次表演:
magicians = ['Kelvin', 'Vicky', 'Howord']
for magician in magicians:
print(magician.title() + ", your trick is amazing!")
print("I can't wait to see u next trick, " + magician.title() + "\n")
由於兩條 print
語句都縮進了,因此它們將針對列表中每個元素都執行一次。
第二個 print
語句裏的 \n
表示 換行。
運行這段代碼,結果如圖3-2:
實際上,在大多數時候,在 for
循環中一行代碼解決不了問題,你會發現使用 for
循環對每個元素執行衆多不同的操作很有用。
4. 在 for
循環結束後執行一些操作
for
循環結束後再怎麼做?通常,你需要提供總結性輸出或者接着執行程序必須完成的其他任務。
在 for
循環後面,沒有縮進的代碼都只執行一次,且不會重複執行。
比如,還是魔術師列表,向每位魔術師表示期待下次表演後,打印一條向全體魔術師致謝的消息,感謝他們的精彩演出:
magicians = ['Kelvin', 'Vicky', 'Howord']
for magician in magicians:
print(magician.title() + ", your trick is amazing!")
print("I can't wait to see u next trick, " + magician.title() + "\n")
# 沒有縮進,在循環結束後僅執行一次
print("Thank u, everyone, That was a great magic show!")
運行這段代碼,結果如圖4-1:
從結果可以看出,由於第三個 print
語句沒有縮進,因此只執行了一次。
結尾語
看到這裏,你心裏應該對遍歷列表有了點數,作爲初學者,先不要深究其原理,首先要做的是把這語法記住,然後寫幾個栗子,做到熟練運用,到了一定的地步,你會豁然開朗、融會貫通的。
如果你在學習過程中有任何疑問,可以關注文章下方↓↓↓的公衆號及時與我聯繫,我們相互討論,共同學習。
最後,祝你學有所成。