Python學習之循環方法詳解
什麼是循環? —> 循環是有著周而復始的運動或變化的規律;在 Python 中,循環的操作也叫做 ‘遍歷’ 。 與現實中一樣,Python 中也同樣存在著無限循環的
方法與有限循環的方法。接下來我們就先看看有限循環的方法 —> for 循環
for 循環
for 循環的功能:通過 for 關鍵字將列表、元組、字符串、字典中的每個元素按照序列順序進行遍歷(循環),當讀取到最後一個元素循環也就結束瞭。
for 循環的用法:示例如下
for item in iterable: # for循環語句塊 print(item) # 每次循環對應的代碼塊 # 代碼塊所需要的縮進 # >>> iterable : 可循環的數據類型,如列表、元組、字符串、字典 # >>> item : iterable 中的每一個成員(元素) # >>> 返回值 : for循環是語句,沒有返回值;但是在一定的特殊情況下,是有返回值的。 books = ['Python不禿頭', 'PHP是最美的語言', 'DBA從入門到刪庫', '面向監獄的爬蟲'] for book in books: print(book) print('finish') # >>> 執行結果如下: # >>> Python不禿頭 # >>> PHP是最美的語言 # >>> DBA從入門到刪庫 # >>> 面向監獄的爬蟲 # >>> finish str_demo = 'Python' for i in str_demo: print(i) # >>> P # >>> y # >>> t # >>> h # >>> o # >>> n users = {'name': 'Neo', 'age': '18'} for user in users: print(user, users[user]) # >>> 執行結果如下: # >>> name Neo # >>> age 18 # >>> 該循環的每一次遍歷取 kay 的 value 不是很友好,有沒有更好的方法方便我們取值呢?繼續往下看。
字典利用 items 內置函數進行 for 循環
items() 內置函數的功能:將字典轉成偽列表,每個 key 、 value 轉成元組。
items() 內置函數的用法:示例如下
for key, value in dict.items(): print(key, value) # >>> items : 無參數 # >>> key : for 循環體中獲取的字典當前元素的 key # >>> value : for循環體中對應的 key 的 value 的值 # >>> 返回值 : for 循環是語句,沒有返回值;items 返回一個列表 dict_users = {'name': 'Neo', 'age': '18'} for key, value in dict_users.items(): print(key, value) # >>> 執行結果如下: # >>> name Neo # >>> age 18 # 如果是一個列表內存在著字典元素呢? user_list = [{'name': 'Neo'}, {'name': 'Jack'}] for user in user_list: print(user.get('name')) print(type(user)) print(user.get('age')) # >>> 執行結果如下: # >>> Neo # >>> <class 'dict'> # >>> None # 因為 age 並沒有被定義,所以返回的是 Node # >>> Jack # >>> <class 'dict'> # >>> None
Python 的內置函數 – range
range() 內置函數的功能:返回的是一個一定范圍的可迭代對象(即可進行 for 循環),元素為整型。它不是列表,無法打印信息,但是可以循環。range() 函數一般幫助我們執行一定次數的循環而使用,比如設定循環5次。
range() 內置函數的用法:示例如下
for item in range(start, stop, step=1): print(item) # >>> start : 開始的數字,類似索引的左邊 # >>> stop : 結束的數字,類似索引的右邊 # >>> step : 跳步,類似索引中的第三個參數 # >>> 返回值 : 返回一個可迭代(循環的)以整型為主的對象 # >>> 需要註意的是 range() 也是 左含右不含的方式 test_int = range(5) for item in test_int: print(item) # >>> 執行結果如下: # >>> 0 # >>> 1 # >>> 2 # >>> 3 # >>> 4
else 在 for 循環中的使用
- else 語句隻能在 for 循環正常退出後執行
- 也就是說循環沒有報錯,沒有中途停止的情況下, else 語句 才會發生作用
示例如下:
''' for 變量 in 序列: 代碼塊 1 else: 代碼塊 2 ''' test_int = range(5) for item in test_int: print(item) else: print('for循環成功結束')
重點
- 若想執行 else 裡面的代碼塊,必須是觸達到循環條件且為假
- 如果在循環裡面提前結束瞭循環(break),則不會執行 else 裡面的代碼塊
for 循環刪除列表元素的避坑指南
首先,我們定義一個列表,使用 for 循環 刪除列表中偶數(即能夠被2整除的元素)
test_list = [3, 6, 8, 9, 25, 36, 100, 105] for item in test_list: if item % 2 == 0: test_list.remove(item) print(test_list) # 執行結果如下: # >>> [3, 8, 9, 25, 100, 105]
這裡我們會發現 元素 8 、元素 100 仍然存在,刪除 偶數 元素的操作存在瞭遺漏。這是為什麼呢?
其實,這是因為 remove() 函數在執行刪除一個元素之後,後邊的元素會自動補位到上一個被刪除元素的位置上去。然而此時的 for 循環 在正向的往下運行,會略過這個補位的元素,由此就造成瞭遍歷的遺漏。
所以正確的遍歷代碼如下:
test_list = [3, 6, 8, 9, 25, 36, 100, 105] for item in test_list[::-1]: if item % 2 == 0: test_list.remove(item) print(test_list) # 執行結果如下: # >>> [3, 9, 25, 105]
嵌套 for 循環
什麼是嵌套 for 循環? —> 即 for 循環中還有 for 循環
示例如下:
for i in range(3): for j in range(2): print('內層循環:', j) print('外層循環:', i) # >>> 執行結果如下: # >>> 內層循環: 0 # >>> 外層循環: 0 # >>> 內層循環: 1 # >>> 外層循環: 0 # >>> 內層循環: 0 # >>> 外層循環: 1 # >>> 內層循環: 1 # >>> 外層循環: 1 # >>> 內層循環: 0 # >>> 外層循環: 2 # >>> 內層循環: 1 # >>> 外層循環: 2 name = ['Neo', 'Jack', 'Lily'] age = [17, 18] for a in name: # print(a) for b in age: print('姓名:', a, '年齡:', b) # >>> 執行結果如下: # >>> 姓名: Neo 年齡: 17 # >>> 姓名: Neo 年齡: 18 # >>> 姓名: Jack 年齡: 17 # >>> 姓名: Jack 年齡: 18 # >>> 姓名: Lily 年齡: 17 # >>> 姓名: Lily 年齡: 18
while 循環
什麼是 while 循環? —> 以一定條件為基礎的循環,條件滿足的情況下無限循環,條件不滿足則退出循環。
while 循環 不依賴可迭代的數據類型,而 for 循環依賴。
while 循環的功能:在滿足條件的情況下,會無限循環;不滿足條件後,將停止循環。
while 循環的用法:示例如下
while bool_result: do # >>> bool_result : 佈爾類型,此處與 if 語法完全一直 # >>> do : while 循環體的代碼塊;需要縮進 # >>> 返回值 : while 循環是語句,沒有返回值 test_int = 1 while test_int < 5: print(test_int, end='\n') test_int += 1 # >>> 執行結果如下: # >>> 1 # >>> 2 # >>> 3 # >>> 4
users_list = ['Neo', 'Jack', 'Lily', 'Adem'] index = 0 length = len(users_list) while index <= length - 1: print('當前循環到的用戶名為:', users_list[index]) index += 1 print('while循環結束') # >>> 執行結果如下: # >>> 當前循環到的用戶名為: Neo # >>> 當前循環到的用戶名為: Jack # >>> 當前循環到的用戶名為: Lily # >>> 當前循環到的用戶名為: Adem # >>> while循環結束
註意:應避免 while True: 的情況,否則會進入死循環。
拓展:列表推導式
列表推導式也叫做列表解析式,是一種快速創建列表的簡潔語法。
列表推導式以[]中括號為標志,一般由表達式、循環語句、條件語句組成(條件語句非必須)。
列表推導式 和 for 循環明顯存在的關聯,下面我們看一下對比。
# 20以內所有偶數的平方 list_1 = [] for x in range(20): if x % 2 == 0: list_1.append(x**2) print(list_1) # 運行結果:[0, 4, 16, 36, 64, 100, 144, 196, 256, 324] # 列表推導式,20以內所有偶數的平方 print([x ** 2 for x in range(20) if x % 2 == 0]) # 運行結果:[0, 4, 16, 36, 64, 100, 144, 196, 256, 324]
列表推導式對 for 循環語句的格式做瞭一下簡單的變形,並用 [ ] 括起來,最終將循環過程中計算表達式得到的一系列值組成一個列表。
常見的推導式方法
元組推導式如下:
# 元組推導式 t_1 = (x for x in range(10)) # 結果是生成器對象,使用tuple()函數將其轉換為元組 print(tuple(t_1)) # 運行結果:(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
字典推導式如下:
# 字典推導式 print({x:x**2 for x in range(10)}) # 運行結果:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
集合推導式如下:
# 集合推導式 print({x for x in range(10)}) # 運行結果:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
循環的繼續與退出(continue 與 break)
前面我們學習瞭 for 循環 與 while 循環 , 它們可以幫助我們自動處理一些業務。但是在循環中難免會出一些意外的狀況,這個時候如果再繼續循環下去,就會對我們的業務不利,這個時候就需要使用到 continue 、break 來幫助我們河貍的退出循環。
continue 的使用
continue 的功能:循環遇到 continue 將停止本次數據循環,進行下一次循環
continue 的用法:示例如下
while bool: continue for item in iterable: continue print(item) # >>> continue : 屬於語法,不需要加 () 即可執行;無參數 # >>> 返回值 : continue 是語法,沒有返回值。 count = 1 while count < 5: print(count) continue count += 1 # >>> 執行結果如下: # >>> 1, 1, 1, 1, ... 無限循環,一直是1
break 的使用
break 的功能:是循環正常停止循環(遍歷),這時如果循環配合瞭 else 語句,else語句將不執行。
break 的用法:示例如下
while bool: break for item in iterable print(item) break # >>> break :屬於語法,不需要加 () 即可執行;無參數。 # >>> 返回值 : break 是語法,沒有返回值。 count = 1 while count < 5: print(count) count += 1 break # >>> 執行結果如下: # >>> 1
條件語句 與 continue、break 的關系
- continu 與 break 通常伴隨著循環語句中的條件語句,滿足某些條件可以繼續執行,不滿足某些條件提前結束循環。
- 在 while 循環中,break 語句的優先權要大於 while 邏輯塊的判斷結果 (比如上文中的 count += 1)
示例如下:
count = 1 while count < 5: print(count) count += 1 if count == 2: break # >>> 執行結果如下: # >>> 1
循環實現九九乘法表
代碼示例如下:
# for 循環 實現九九乘法表 for i in range(1, 10): for j in range(1, i + 1): print('{} * {} = {}'.format(i, j, i * j), end=' ') print('') # >>> 執行結果如下: # >>> 1 * 1 = 1 # >>> 2 * 1 = 2 2 * 2 = 4 # >>> 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 # >>> 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 # >>> 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 # >>> 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 # >>> 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 # >>> 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 # >>> 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
# while 循環 實現九九乘法表 i = 0 j = 0 while i < 9: i += 1 while j < 9: j += 1 print('{} * {} = {}'.format(j, i, i * j), end=' ') if i == j: j = 0 print('') break # >>> 執行結果如下: # >>> 1 * 1 = 1 # >>> 1 * 2 = 2 2 * 2 = 4 # >>> 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 # >>> 1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 # >>> 1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25 # >>> 1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36 # >>> 1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 # >>> 1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 # >>> 1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
如何使用一行代碼實現九九乘法表
print('\n'.join([' '.join(['{} * {} = {} '.format(item_1, item_2, item_1 * item_2) for item_2 in range(1, 10) if item_2 <= item_1]) for item_1 in range(1, 10)])) # 利用瞭 列表推導式 及 列表轉字符串 # 但使用這種方式的閱讀性極差, 項目中絕不能使用
到此這篇關於Python學習之循環方法詳解的文章就介紹到這瞭,更多相關Python循環內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!