首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Python 雙層循環順序解析:為什麼先跑完內層再跑外層?

     編輯:程式設計疑難解答

問題現象

代碼輸出順序為:

1 1
1 2
2 1
2 2
3 1
3 2

而非預期的:

1 1
2 2
3 3

或:

1 3
2 3
3 3

代碼還原

for row in range(1, 4):
    for col in range(1, 3):
        print(row, col)

執行機制圖解

  1. 外層循環 row = 1 開始
  2. 內層循環完整跑完:
    • col = 1 → print(1, 1)
    • col = 2 → print(1, 2)
  3. 內層結束,外層遞增 row = 2
  4. 內層再次完整跑完:
    • col = 1 → print(2, 1)
    • col = 2 → print(2, 2)
  5. 以此類推至 row = 3

核心原則

內層循環必須完全耗盡,外層循環才會推進到下一次迭代。 這是所有主流編程語言(Python、Java、C、JavaScript 等)雙層/多層循環的統一語義。

常見誤區與正確預期

誤區預期實際輸出原因
對角線配對 (1,1)(2,2)(3,3)笛卡爾積 (1,1)(1,2)(2,1)(2,2)...兩層獨立循環產生笛卡爾積,非一一對應
內層固定值 (1,3)(2,3)(3,3)內層遍歷所有值內層每次都從頭跑到尾

如何實現「對角線」或「固定內層」效果?

對角線配對:使用 zip 或單層循環

# 方法一:zip(長度需一致)
for row, col in zip(range(1, 4), range(1, 4)):
    print(row, col)  # 1 1 / 2 2 / 3 3

# 方法二:單層循環索引
for i in range(3):
    print(i+1, i+1)

固定內層值:調整循環結構

# 只取內層最後一個值
for row in range(1, 4):
    col = 3  # 固定值
    print(row, col)  # 1 3 / 2 3 / 3 3

總結

雙層循環遵循「內層跑完,外層再進」的嵌套語義,產生的是笛卡爾積而非一一對應。理解此機制是正確編寫矩陣遍歷、組合生成、表格渲染等邏輯的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved