【Python學習】python學習手冊--第十三章 while和for循環

while循環

while循環是檢測某一個條件,如果條件爲真就執行while命令內的代碼塊。

一般格式

最完整的格式是:首行以及測試表達式有一列或者多列擁有相同代碼縮進的主體,以及一個可選的else部分

while <test>:
    <statements1>
else:                       #else部分是循環語句在沒有break語句執行的情況下,離開循環時執行
    <statements2>

Python並沒有其他語句中所謂的do….until循環語句。需要達到這種效果,可以藉助break語句。

break,continue,pass和循環else

語句 說明 備註
break 跳出最近所在的循環 跳過整個循環語句
continue 直接進行循環語句的下次迭代 跳到循環語句的開頭處,繼續執行循環
pass 什麼也不做 空語句的佔位符
循環else 當循環正常結束,執行else代碼塊 正常結束即沒有執行到break語句沒有執行循環主體語句時,也會執行else部分

pass語句通常用於爲複合語句或函數編寫一個空的主體,複合語句或函數在編程後面才實現時,爲了程序不產生語法或其它錯誤,就用pass來跳過改語句或函數的執行,如下:

def fun():
   pass
while <test>:
   pass

for循環

for循環是Python中很常用的一個循環,是一個通用的序列迭代器:可以用於迭代任何有序的序列對象內的元素。

一般格式

for <target> in <object>:  #每一次迭代<target>就像遊標一樣,取出object中的一個元素,進入循環主體進行處理。
    <statements1>
else:
    <statements2>              #這裏的else模塊與while的else模塊執行規則一致,沒有碰到break語句時執行。

循環編寫技巧

for循環包括多數計數器式的循環。一般而言,for比while容易寫,執行速度也比較快。在某些情況下,你需要某種特定的方式來進行迭代,就可以使用python提供的內置函數:

  • 內置函數range返回一些列連續增加的整數,可作爲for中的索引。
  • 內置zip函數返回並行元素的元組的組成,可用作for中內遍歷數個序列。
>>> range(6)
range(0, 6)
>>> list(range(6))
[0, 1, 2, 3, 4, 5]
>>> list(range(2,5))            #第一個與第二個元素,提供產生範圍的上下邊界
[2, 3, 4]
>>> list(range(2,5,2))
[2, 4]
>>> list(range(2,10,2))          #第三個參數提供步長
[2, 4, 6, 8]
>>> 

並行遍歷:zip和map

內置函數range允許我們在for循環中以非完備的方式遍歷序列。內置的zip函數也讓我們使用for循環來並行使用多個序列。

>>> l1=[1,2,3,4,5]
>>> l2=[6,7,8,9,0]
>>> zip(l1,l2)
<zip object at 0x7f8f149fe7c8>
>>> list(zip(l1,l2))
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 0)]
>>> l2=[6,7,8,9]                           #注意到當l2列表少一個元素時,zip會將長的列表“裁剪”與短列表一致
>>> list(zip(l1,l2))
[(1, 6), (2, 7), (3, 8), (4, 9)]
>>> for (a,b) in zip(l1,l2):               #zip函數的返回對象,可以直接用於循環迭代。
...     print(a,b)
... 
1 6
2 7
3 8
4 9
>>> 

map會帶一個函數和一個序列,將序列中的每一個元素都應用於這個函數,並將函數結果返回。

>>> map(int,'123456')
<map object at 0x7f8f1730f588>
>>> list(map(int,'123456'))
[1, 2, 3, 4, 5, 6]
>>> 

用zip函數可以巧妙的構造字典:

>>> l1
[1, 2, 3, 4, 5]
>>> l2
[6, 7, 8, 9]
>>> for (x,y) in zip(l1,l2): D[x]=y            #用鍵值方式構建字典時,必須先聲明一個空字典
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'D' is not defined
>>> D={}
>>> for (x,y) in zip(l1,l2): D[x]=y
... 
>>> D
{1: 6, 2: 7, 3: 8, 4: 9}
>>> D2=dict(zip(l1,l2))              #這是一種更簡單的方法,對dict調用時,實際上得到的是類似列表到字典的轉換
>>> D2
{1: 6, 2: 7, 3: 8, 4: 9}
>>> 

產生偏移和元素:enumerate
有些循環,我們需要得到該次迭代在循環體中的偏移量。

>>> for (x,y) in enumerate("abcdefg"):    #enumerate返回一個生成器對象,這種對象支持迭代協議
...   print("index:",x,"    ",y)          #簡而言之,這個對象會有一個__next__方法,由一個內置函數調用它
... 
index: 0      a
index: 1      b
index: 2      c
index: 3      d
index: 4      e
index: 5      f
index: 6      g
>>> 

小結

在Python中,循環是很常見的複合語句,本章討論了循環語句,以及循環語句的使用函數與使用技巧。while語句是一個通用的循環語句,for循環設計用來在一個序列中遍歷各個元素(序列需要是真正可迭代的)。zip函數用來循環並行兩個列表。range函數用來生成連續值的,可以用在for語句中進行循環控制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章