歡迎關注公眾號:python資料科學家
【要點搶先看】
1.for迴圈的用法範例
2.while迴圈的用法範例
3.字典和檔案的迭代用法舉例
迴圈是每個程式語言的最基本最重要的部分之一,這一部分我們來說說迴圈迭代這個話題。
【妹子說】這些我知道,迴圈就是for迴圈、while迴圈嘛。
不過python的迴圈使用更方便,涉及的技巧和用法也更值得好好聊聊。
這一小節主要來談談迴圈的基本用法,對,通過這一節你就能愉快的使用python中常見的迴圈用法了。
首先是while迴圈。
需要反覆迴圈執行的部分(也就是迴圈主體)在頂端測試條件為真時會重複執行,直到測試條件變為假時退出。舉個簡單的例子一看就明白了,其中迴圈主體就是while後縮排的程式碼塊。
a = 0
b = 10
while a < b:
print(a, end=` `)
a = a + 1
0 1 2 3 4 5 6 7 8 9
複製程式碼
接著再介紹一下while迴圈中會用到的continue,break和else三個關鍵字
continue是跳出本輪迴圈,回到迴圈主體的頂部再次開始新的迴圈
a = 0
b = 10
while a < b:
a = a + 1
if a % 2 != 0:
continue
print(a, end=` `)
2 4 6 8 10
複製程式碼
break是直接跳出迴圈
a = 0
b = 10
while a < b:
a = a + 1
if a == 5:
break
print(a, end=` `)
1 2 3 4
複製程式碼
else關鍵字,只有當迴圈正常離開的時候才會執行,即沒有碰到break語句
y = 33
x = y // 2
while x > 1:
if y % x == 0:
print(`{} has a factor {}`.format(y,x))
break
x = x - 1
else:
print(`{} is prime`.format(y))
33 has a factor 11
複製程式碼
我們可以看出,如果y不是質數,就會執行到break語句,從而跳過else語句,不執行else語句
如果是一個質數,就不會執行到break語句,迴圈正常退出的話,就執行else語句
y = 29
x = y // 2
while x > 1:
if y % x == 0:
print(`{} has a factor {}`.format(y,x))
break
x = x - 1
else:
print(`{} is prime`.format(y))
29 is prime
複製程式碼
我們再來看看for迴圈
for迴圈更加通用,他是一個通用的序列迭代工具,可以遍歷任何有序的序列物件內的元素。例如之前介紹過的:字串、列表、元組等,以及其他一些內建的可以用來迭代的物件(到時候專門展開)。
回顧幾個例子,列表、字串、元組的遍歷
for x in [1,2,3,4]:
print(x, end=` `)
1 2 3 4
複製程式碼
–
for x in `hello`:
print(x, end=` `)
h e l l o
複製程式碼
–
for x in (`i`, `am`, `a`, `teacher`):
print(x,end=` `)
i am a teacher
複製程式碼
–
T = [(1, 2), (3, 4), (5, 6)]
for (a, b) in T:
print(a,b)
1 2
3 4
5 6
複製程式碼
這裡再單獨說說另外兩種特殊的內建型別物件,一個是字典、一個是檔案。
字典的遍歷
字典的遍歷這裡單獨說說,相比於上面幾個序列型別,字典的特殊之處在於他內部的物件不是有序的。
但是他也能通過for迴圈來遍歷,常見的是通過鍵來遍歷,還有一種是通過鍵值對的元組來遍歷
D = {`a`:1, `b`:2, `c`:3}
for key in D:
print(key, `--->`, D[key])
b ---> 2
c ---> 3
a ---> 1
複製程式碼
–
D = {`a`: 1, `b`: 2, `c`: 3}
for (key, value) in D.items():
print(key, `--->`, value)
a ---> 1
c ---> 3
b ---> 2
複製程式碼
檔案的遍歷
因為檔案儲存了很多字元和行,因此也是迴圈常見的典型使用案例,最原始的方法可以呼叫檔案物件的read方法,把檔案內容一次性載入至字串物件
file = open(`myfile.txt`, `r`)
print(file.read())
hello text file
goodbyt text file
Hahahahah
複製程式碼
那麼如果想逐行讀取文字檔案呢?for迴圈是最易於編寫及執行最快的選擇,這裡有兩種方法
for line in open (`myfile.txt`,`r`).readlines():
print(line, end=``)
複製程式碼
–
for line in open (`myfile.txt`,`r`):
print(line, end=``)
hello text file
goodbyt text file
Hahahahah
複製程式碼
這兩種方法的執行結果是一樣的,表面差別不大,但實際上有很大的區別:
第一種方法通過readlines方法,會首先一次性把檔案載入到行字串列表中,然後再對這個字串列表進行迭代;
而第二種方法執行的原理則有所不同,他並非一次性將全部的檔案內容載入到記憶體中,而是在迭代的時候,迴圈到了哪一行才將哪一行讀入到記憶體。這裡涉及到一個新的概念—-迭代器(open函式返回的那個就是檔案迭代器),後面再著重系統介紹。
現在我們只需要知道,第二種方法是文字檔案讀取的最佳選擇,它簡單、且對任意大小的檔案都有效,因為他不會一次性把整個檔案都載入到記憶體中,相反第一種方法存在記憶體壓力過大的問題。
【妹子說】看來for比while迴圈容易編寫,執行時也比較快。
所以每當你需要遍歷序列時,都應該將其作為首選的工具,同時還應該熟練使用一些迴圈迭代的技巧來優化你的程式,下一小節我們說說三種迴圈迭代的常用技巧。
公眾號二維碼:python資料科學家: