代碼輸出順序為:
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)
row = 1 開始col = 1 → print(1, 1)col = 2 → print(1, 2)row = 2col = 1 → print(2, 1)col = 2 → print(2, 2)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(長度需一致)
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
雙層循環遵循「內層跑完,外層再進」的嵌套語義,產生的是笛卡爾積而非一一對應。理解此機制是正確編寫矩陣遍歷、組合生成、表格渲染等邏輯的基礎。