首頁 > 軟體

Python中的巢狀迴圈詳情

2022-03-23 19:00:57

1 什麼是巢狀迴圈

所謂巢狀迴圈就是一個外迴圈的主體部分是一個內迴圈。內迴圈或外迴圈可以是任何型別,例如 while 迴圈或 for 迴圈。 例如,外部 for 迴圈可以包含一個 while 迴圈,反之亦然。外迴圈可以包含多個內迴圈。 迴圈鏈沒有限制。

在巢狀迴圈中,迭代次數將等於外迴圈中的迭代次數乘以內迴圈中的迭代次數。在外迴圈的每次迭代中,內迴圈執行其所有迭代。 對於外迴圈的每次迭代,內迴圈重新開始並在外迴圈可以繼續下一次迭代之前完成其執行。巢狀迴圈通常用於處理多維資料結構,例如列印二維陣列、迭代包含巢狀列表的列表。巢狀迴圈是控制流語句的一部分,可幫助您瞭解 Python 的基礎知識。

2 Python 巢狀 for 迴圈

在 Python 中,for 迴圈用於迭代序列,例如列表、字串、元組,以及其他可迭代物件,例如範圍。在 Python 中使用巢狀 for 迴圈的語法:

# outer for loop
for element in sequence
# inner for loop
for element in sequence:
body of inner for loop
body of outer for loop

在此範例中,我們在 for 迴圈中使用了 for 迴圈。 在本例中,我們列印前十個數位的乘法表。

  • 外部 for 迴圈使用 range() 函數迭代前十個數位。
  • 對於每個外部數位,內部 for 迴圈將執行十次。
  • 在內迴圈的主體中,我們將列印外部數位和當前數的乘積。
  • 內迴圈只不過是外迴圈的主體。

範例:編寫一個巢狀的 for 迴圈程式以在 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()

輸出:

  • 在這個程式中,外部 for 迴圈是從 1 到 10 迭代數位。 range() 返回 10 個數位。 所以外迴圈的總迭代次數是 10。
  • 在巢狀迴圈的第一次迭代中,數位是 1。在下一次,它是 2。依此類推,直到 10。
  • 接下來,對於外迴圈的每次迭代,內迴圈將執行十次。 內部迴圈也將執行 10 次,因為我們列印的乘法表最多為 10。
  • 在內部迴圈的每次迭代中,我們計算了兩個數位的乘法。

2.1 巢狀迴圈列印圖案

巢狀迴圈的另一個最常見用途是列印各種星形和數位模式。讓我們看看如何使用巢狀迴圈在 Python 中列印以下模式。

rows = 5
# outer loop
for i in range(1, rows + 1):
# inner loop
for j in range(1, i + 1):
print("*", end=" ")
print('')
  • 在這個程式中,外迴圈是列印的行數。
  • 行數是五,所以外迴圈會執行五次。
  • 接下來,內部迴圈是每行中的總列數。
  • 對於外部迴圈的每次迭代,列計數都會增加 1。
  • 在外迴圈的第一次迭代中,列數為 1,下一次為 2。依此類推。
  • 內部迴圈迭代等於列數。
  • 在內部迴圈的每次迭代中,我們列印 star。

2.2 在 for 迴圈中的while迴圈

在一種迴圈中使用另一種型別的迴圈非常常見且很有幫助。 我們可以在 for 迴圈中放置一個 while 迴圈。

假設我們想將列表中的每個名稱重複五次:

  • 在這裡,我們將使用外部 for 迴圈迭代列表。
  • 外層for迴圈每次迭代,內層for迴圈執行5次,列印當前名稱5次。
# 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 實踐:列印一個帶有 5 行 3 列星形的矩形圖案

列印以下星形矩形:

 
# 5 rows
for name in range(5):
# 3 column
for j in range(3):
print('*', end='')
print()

3 打破巢狀迴圈

break 語句用於迴圈內部退出迴圈。 如果在巢狀迴圈內使用 break 語句(在另一個迴圈內迴圈),它將終止最內層迴圈。

在下面的範例中,我們有兩個迴圈。 外部 for 迴圈使用 range() 函數迭代前四個數位,內部 for 迴圈也迭代前四個數位。 如果外部編號和內部迴圈的當前編號相同,則中斷內部(巢狀)迴圈。

for i in range(4):
for j in range(4):
if j == i:
break
print(i, j)

輸出:

4 繼續巢狀迴圈

continue 語句跳過當前迭代並移動到下一個迭代。 在 Python 中,當迴圈內遇到 continue 語句時,它會跳過它下面的所有語句並立即跳轉到下一次迭代。

在下面的範例中,我們有兩個迴圈。 外部 for 迴圈迭代第一個列表,內部迴圈也迭代第二個數位列表。如果外部編號和內部迴圈的當前編號相同,則移動到內部迴圈的下一次迭代。

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 使用列表理解的單行巢狀迴圈

例如,如果您有兩個列表並想要獲取它們的所有組合,為了實現這一點,您需要使用兩個巢狀迴圈,如下所述。

first = [2, 3, 4]
second = [20, 30, 40]
final = []
for i in first:
for j in second:
final.append(i+j)
print(final)

我們可以使用列表壓縮和巢狀迴圈編寫更快速、更緊湊的程式碼,

如下所示:

first = [2, 3, 4]
second = [20, 30, 40]
final = [i+j for i in first for j in second]
print(final)

輸出:

程式碼編寫思路:

  • 首先,編寫一個外部 for 迴圈,它將迭代第一個列表,如 [for i in first]。
  • 接下來,編寫一個內部迴圈,它將在外部迴圈之後迭代第二個列表,例如 [for i in first for j in second]
  • 最後,計算外數和內數之和,如[i+j for i in first for j in second]
  • 最後,將結果儲存在一個新列表中,例如 final = [i+j for i in first for j in second]。

下面讓我們看看其他的例子:

在這個例子中,我們將在列表中使用兩個 for 迴圈,最終結果將是一個列表列表。 我們不會在每個列表中包含相同的數位。 我們將使用 if 條件過濾它們。

final = [[x, y] for x in [10, 20, 30] for y in [30, 10, 50] if x != y]
print(final)

輸出:

6 Python中的巢狀while迴圈

在 Python 中,while 迴圈語句在特定條件為真時重複執行程式碼塊。 當數位迭代不固定時,我們使用 while 迴圈。在本節中,我們將瞭解如何在另一個 while 迴圈中使用 while 迴圈。在 Python 中編寫巢狀的 while 迴圈語句的語法如下:

while expression:
while expression:
statement(s)
statement(s)

在下面例子中,我們將在每行列印前 10 個數位 5 次。

i = 1
while i <= 5:
j = 1
while j <= 10:
print(j, end='')
j = j + 1
i = i + 1
print()

輸出:

6.1 While 迴圈內的 for 迴圈

有時在另一種迴圈中使用一種迴圈會很有幫助。 我們可以在while迴圈裡面放一個for迴圈。假設我們想要列印從 1 到 100 的所有完美數位。

  • 在這裡,我們將使用 while 迴圈迭代前 100 個數位。
  • 在外部while迴圈的每次迭代中,內部for迴圈從1到當前外部數位執行,以檢查當前數位是否為完美數位。(完美數位是一個數學概念,感興趣的讀者可再深入查詢)
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 何時在 Python 中使用巢狀迴圈?

  • 當您有需要通過相同函數迴圈的巢狀陣列或列表時,巢狀迴圈很方便。
  • 當您想使用行和列列印不同的星形和數位模式時。

記住時間複雜度。 讓我們通過 Python 中巢狀 for 迴圈如何工作的範例來理解這一點。我們使用 for 迴圈迭代序列或可迭代的給定元素。 就像我在列表中一樣。 這裡的時間複雜度是 O(n),因為我們正在迭代列表中的所有專案。執行步驟(迭代)的數量決定了迴圈的時間複雜度。當您使用巢狀迴圈並且外部和內部迴圈都在沒有任何 if 條件的情況下執行時,時間複雜度為 O(n^2),因為對於所有 n 個元素,程式碼都會執行 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 次迭代,那麼它的時間複雜度會更小。

當我們沒有更好的選擇時使用巢狀迴圈,請記住編寫高效且緊湊的程式碼遠勝於編寫複雜的程式碼

到此這篇關於Python中的巢狀迴圈詳情的文章就介紹到這了,更多相關Python巢狀迴圈內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com