給妹子講python-S01E12迴圈迭代初體驗

醬油哥在掘金發表於2019-01-16

歡迎關注公眾號: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 = [(12), (34), (56)]
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])

---> 2
---> 3
---> 1
複製程式碼

D = {`a`1`b`2`c`3}
for (key, value) in D.items():
    print(key, `--->`, value)

---> 1
---> 3
---> 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資料科學家:

給妹子講python-S01E12迴圈迭代初體驗

相關文章