Python嵌套循環(huán)的使用
1 什么是嵌套循環(huán)
所謂嵌套循環(huán)就是一個(gè)外循環(huán)的主體部分是一個(gè)內(nèi)循環(huán)。內(nèi)循環(huán)或外循環(huán)可以是任何類型,例如 while 循環(huán)或 for 循環(huán)。 例如,外部 for 循環(huán)可以包含一個(gè) while 循環(huán),反之亦然。外循環(huán)可以包含多個(gè)內(nèi)循環(huán)。 循環(huán)鏈沒(méi)有限制。
在嵌套循環(huán)中,迭代次數(shù)將等于外循環(huán)中的迭代次數(shù)乘以內(nèi)循環(huán)中的迭代次數(shù)。在外循環(huán)的每次迭代中,內(nèi)循環(huán)執(zhí)行其所有迭代。 對(duì)于外循環(huán)的每次迭代,內(nèi)循環(huán)重新開(kāi)始并在外循環(huán)可以繼續(xù)下一次迭代之前完成其執(zhí)行。嵌套循環(huán)通常用于處理多維數(shù)據(jù)結(jié)構(gòu),例如打印二維數(shù)組、迭代包含嵌套列表的列表。嵌套循環(huán)是控制流語(yǔ)句的一部分,可幫助您了解 Python 的基礎(chǔ)知識(shí)。
2 Python 嵌套 for 循環(huán)
在 Python 中,for 循環(huán)用于迭代序列,例如列表、字符串、元組,以及其他可迭代對(duì)象,例如范圍。在 Python 中使用嵌套 for 循環(huán)的語(yǔ)法:
# outer for loop
for element in sequence
# inner for loop
for element in sequence:
body of inner for loop
body of outer for loop在此示例中,我們?cè)?for 循環(huán)中使用了 for 循環(huán)。 在本例中,我們打印前十個(gè)數(shù)字的乘法表。
- 外部 for 循環(huán)使用 range() 函數(shù)迭代前十個(gè)數(shù)字。
- 對(duì)于每個(gè)外部數(shù)字,內(nèi)部 for 循環(huán)將執(zhí)行十次。
- 在內(nèi)循環(huán)的主體中,我們將打印外部數(shù)字和當(dāng)前數(shù)的乘積。
- 內(nèi)循環(huán)只不過(guò)是外循環(huán)的主體。
示例:編寫(xiě)一個(gè)嵌套的 for 循環(huán)程序以在 Python 中打印乘法表。
# outer loop
for i in range(1, 11):
# nested loop
# to iterate from 1 to 10
for j in range(1, 11):
# print multiplication
print(i * j, end=' ')
print()輸出:

- 在這個(gè)程序中,外部 for 循環(huán)是從 1 到 10 迭代數(shù)字。 range() 返回 10 個(gè)數(shù)字。 所以外循環(huán)的總迭代次數(shù)是 10。
- 在嵌套循環(huán)的第一次迭代中,數(shù)字是 1。在下一次,它是 2。依此類推,直到 10。
- 接下來(lái),對(duì)于外循環(huán)的每次迭代,內(nèi)循環(huán)將執(zhí)行十次。 內(nèi)部循環(huán)也將執(zhí)行 10 次,因?yàn)槲覀兇蛴〉某朔ū碜疃酁?10。
- 在內(nèi)部循環(huán)的每次迭代中,我們計(jì)算了兩個(gè)數(shù)字的乘法。
2.1 嵌套循環(huán)打印圖案
嵌套循環(huán)的另一個(gè)最常見(jiàn)用途是打印各種星形和數(shù)字模式。讓我們看看如何使用嵌套循環(huán)在 Python 中打印以下模式。

rows = 5
# outer loop
for i in range(1, rows + 1):
# inner loop
for j in range(1, i + 1):
print("*", end=" ")
print('')- 在這個(gè)程序中,外循環(huán)是打印的行數(shù)。
- 行數(shù)是五,所以外循環(huán)會(huì)執(zhí)行五次。
- 接下來(lái),內(nèi)部循環(huán)是每行中的總列數(shù)。
- 對(duì)于外部循環(huán)的每次迭代,列計(jì)數(shù)都會(huì)增加 1。
- 在外循環(huán)的第一次迭代中,列數(shù)為 1,下一次為 2。依此類推。
- 內(nèi)部循環(huán)迭代等于列數(shù)。
- 在內(nèi)部循環(huán)的每次迭代中,我們打印 star。
2.2 在 for 循環(huán)中的while循環(huán)
在一種循環(huán)中使用另一種類型的循環(huán)非常常見(jiàn)且很有幫助。 我們可以在 for 循環(huán)中放置一個(gè) while 循環(huán)。假設(shè)我們想將列表中的每個(gè)名稱重復(fù)五次:
- 在這里,我們將使用外部 for 循環(huán)迭代列表。
- 外層for循環(huán)每次迭代,內(nèi)層for循環(huán)執(zhí)行5次,打印當(dāng)前名稱5次。
names = ['Kelly', 'Jessa', 'Emma']
# outer loop
for name in names:
# inner while loop
count = 0
while count < 5:
print(name, end=' ')
# print(name)
# increment counter
count = count + 1
print()輸出:

2.3 實(shí)踐:打印一個(gè)帶有 5 行 3 列星形的矩形圖案
打印以下星形矩形:

# 5 rows
for name in range(5):
# 3 column
for j in range(3):
print('*', end='')
print()3 打破嵌套循環(huán)
break 語(yǔ)句用于循環(huán)內(nèi)部退出循環(huán)。 如果在嵌套循環(huán)內(nèi)使用 break 語(yǔ)句(在另一個(gè)循環(huán)內(nèi)循環(huán)),它將終止最內(nèi)層循環(huán)。
在下面的示例中,我們有兩個(gè)循環(huán)。 外部 for 循環(huán)使用 range() 函數(shù)迭代前四個(gè)數(shù)字,內(nèi)部 for 循環(huán)也迭代前四個(gè)數(shù)字。 如果外部編號(hào)和內(nèi)部循環(huán)的當(dāng)前編號(hào)相同,則中斷內(nèi)部(嵌套)循環(huán)。
for i in range(4):
for j in range(4):
if j == i:
break
print(i, j)輸出:

4 繼續(xù)嵌套循環(huán)
continue 語(yǔ)句跳過(guò)當(dāng)前迭代并移動(dòng)到下一個(gè)迭代。 在 Python 中,當(dāng)循環(huán)內(nèi)遇到 continue 語(yǔ)句時(shí),它會(huì)跳過(guò)它下面的所有語(yǔ)句并立即跳轉(zhuǎn)到下一次迭代。
在下面的示例中,我們有兩個(gè)循環(huán)。 外部 for 循環(huán)迭代第一個(gè)列表,內(nèi)部循環(huán)也迭代第二個(gè)數(shù)字列表。如果外部編號(hào)和內(nèi)部循環(huán)的當(dāng)前編號(hào)相同,則移動(dòng)到內(nèi)部循環(huán)的下一次迭代。
first = [2, 4, 6]
second = [2, 4, 6]
for i in first:
for j in second:
if i == j:
continue
print(i, '*', j, '= ', i * j)輸出:

5 使用列表理解的單行嵌套循環(huán)
例如,如果您有兩個(gè)列表并想要獲取它們的所有組合,為了實(shí)現(xiàn)這一點(diǎn),您需要使用兩個(gè)嵌套循環(huán),如下所述。
first = [2, 3, 4]
second = [20, 30, 40]
final = []
for i in first:
for j in second:
final.append(i+j)
print(final)您可以使用列表壓縮和嵌套循環(huán)編寫(xiě)更快速、更緊湊的代碼,如下所示。
first = [2, 3, 4] second = [20, 30, 40] final = [i+j for i in first for j in second] print(final)
輸出:

代碼編寫(xiě)思路:
- 首先,編寫(xiě)一個(gè)外部 for 循環(huán),它將迭代第一個(gè)列表,如 [for i in first]。
- 接下來(lái),編寫(xiě)一個(gè)內(nèi)部循環(huán),它將在外部循環(huán)之后迭代第二個(gè)列表,例如 [for i in first for j in second]。
- 最后,計(jì)算外數(shù)和內(nèi)數(shù)之和,如 [i+j for i in first for j in second]。
- 最后,將結(jié)果存儲(chǔ)在一個(gè)新列表中,例如 final = [i+j for i in first for j in second]。
下面讓我們看看其他的例子:
在這個(gè)例子中,我們將在列表中使用兩個(gè) for 循環(huán),最終結(jié)果將是一個(gè)列表列表。 我們不會(huì)在每個(gè)列表中包含相同的數(shù)字。 我們將使用 if 條件過(guò)濾它們。
final = [[x, y] for x in [10, 20, 30] for y in [30, 10, 50] if x != y] print(final)
輸出:

6 Python中的嵌套while循環(huán)
在 Python 中,while 循環(huán)語(yǔ)句在特定條件為真時(shí)重復(fù)執(zhí)行代碼塊。 當(dāng)數(shù)字迭代不固定時(shí),我們使用 while 循環(huán)。在本節(jié)中,我們將了解如何在另一個(gè) while 循環(huán)中使用 while 循環(huán)。在 Python 中編寫(xiě)嵌套的 while 循環(huán)語(yǔ)句的語(yǔ)法如下:
while expression:
while expression:
statement(s)
statement(s)在下面例子中,我們將在每行打印前 10 個(gè)數(shù)字 5 次。
i = 1
while i <= 5:
j = 1
while j <= 10:
print(j, end='')
j = j + 1
i = i + 1
print()輸出:

6.1 While 循環(huán)內(nèi)的 for 循環(huán)
有時(shí)在另一種循環(huán)中使用一種循環(huán)會(huì)很有幫助。 我們可以在while循環(huán)里面放一個(gè)for循環(huán)。假設(shè)我們想要打印從 1 到 100 的所有完美數(shù)字。
- 在這里,我們將使用 while 循環(huán)迭代前 100 個(gè)數(shù)字。
- 在外部while循環(huán)的每次迭代中,內(nèi)部for循環(huán)從1到當(dāng)前外部數(shù)字執(zhí)行,以檢查當(dāng)前數(shù)字是否為完美數(shù)字。(完美數(shù)字是一個(gè)數(shù)學(xué)概念,感興趣的讀者可再深入查詢)
print('Show Perfect number fom 1 to 100')
n = 2
# outer while loop
while n <= 100:
x_sum = 0
# inner for loop
for i in range(1, n):
if n % i == 0:
x_sum += i
if x_sum == n:
print('Perfect number:', n)
n += 1輸出:

7 何時(shí)在 Python 中使用嵌套循環(huán)?
- 當(dāng)您有需要通過(guò)相同函數(shù)循環(huán)的嵌套數(shù)組或列表時(shí),嵌套循環(huán)很方便。
- 當(dāng)您想使用行和列打印不同的星形和數(shù)字模式時(shí)。
記住時(shí)間復(fù)雜度。 讓我們通過(guò) Python 中嵌套 for 循環(huán)如何工作的示例來(lái)理解這一點(diǎn)。我們使用 for 循環(huán)迭代序列或可迭代的給定元素。 就像我在列表中一樣。 這里的時(shí)間復(fù)雜度是 O(n),因?yàn)槲覀冋诘斜碇械乃许?xiàng)目。執(zhí)行步驟(迭代)的數(shù)量決定了循環(huán)的時(shí)間復(fù)雜度。當(dāng)您使用嵌套循環(huán)并且外部和內(nèi)部循環(huán)都在沒(méi)有任何 if 條件的情況下運(yùn)行時(shí),時(shí)間復(fù)雜度為 O(n^2),因?yàn)閷?duì)于所有 n 個(gè)元素,代碼都會(huì)執(zhí)行 n 次。
numbers = [[1, 2, 3], [4, 5, 6]]
cnt = 0
for i in numbers:
for j in i:
print('iteration', cnt, end=': ')
print(j)
cnt = cnt + 1輸出:

如果您在內(nèi)部循環(huán)中給出一個(gè)條件,該條件將在某些元素之后停止執(zhí)行,并且不執(zhí)行內(nèi)部循環(huán)或外部循環(huán)的所有 n 次迭代,那么它的時(shí)間復(fù)雜度會(huì)更小。
當(dāng)您沒(méi)有更好的選擇時(shí)使用嵌套循環(huán),請(qǐng)記住編寫(xiě)高效且緊湊的代碼遠(yuǎn)勝于編寫(xiě)復(fù)雜的代碼。
到此這篇關(guān)于Python嵌套循環(huán)的使用的文章就介紹到這了,更多相關(guān)Python嵌套循環(huán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于sklearn中模塊包導(dǎo)入報(bào)錯(cuò)的通用解決方法
這篇文章主要介紹了關(guān)于sklearn中模塊包導(dǎo)入報(bào)錯(cuò)的通用解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
使用Python的urllib和urllib2模塊制作爬蟲(chóng)的實(shí)例教程
這篇文章主要介紹了使用Python的urllib和urllib2模塊制作爬蟲(chóng)的實(shí)例教程,展現(xiàn)了這兩個(gè)常用爬蟲(chóng)制作模塊的基本用法,極度推薦!需要的朋友可以參考下2016-01-01
Pycharm?2020最新永久激活碼(附最新激活碼和插件)
最近很多朋友的Pycharm激活時(shí)間又過(guò)期了,今天小編再把激活的方法匯總和工具分享一下,文中給大家分享兩種方式,需要的朋友直接拿去用吧2020-01-01
簡(jiǎn)單幾步教你學(xué)會(huì)Python接口自動(dòng)化測(cè)試
這篇文章主要介紹了簡(jiǎn)單幾步教你學(xué)會(huì)Python接口自動(dòng)化測(cè)試,本文從一個(gè)簡(jiǎn)單的登錄接口測(cè)試入手,一步步調(diào)整優(yōu)化接口調(diào)用姿勢(shì),期望讀者可以通過(guò)本文對(duì)接口自動(dòng)化測(cè)試有一個(gè)大致的了解,需要的朋友可以參考下2023-08-08
python回調(diào)函數(shù)中使用多線程的方法
這篇文章主要介紹了python回調(diào)函數(shù)中使用多線程的方法,需要的朋友可以參考下2017-12-12
Python tkinter實(shí)現(xiàn)的圖片移動(dòng)碰撞動(dòng)畫(huà)效果【附源碼下載】
這篇文章主要介紹了Python tkinter實(shí)現(xiàn)的圖片移動(dòng)碰撞動(dòng)畫(huà)效果,涉及Python tkinter模塊操作圖片基于坐標(biāo)動(dòng)態(tài)變換與數(shù)值判定實(shí)現(xiàn)移動(dòng)、碰撞檢測(cè)等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Python 獲取指定文件夾下的目錄和文件的實(shí)現(xiàn)
這篇文章主要介紹了Python 獲取指定文件夾下的目錄和文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Django框架 查詢Extra功能實(shí)現(xiàn)解析
這篇文章主要介紹了Django框架 查詢Extra功能實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Python3 用matplotlib繪制sigmoid函數(shù)的案例
這篇文章主要介紹了Python3 用matplotlib繪制sigmoid函數(shù)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12

