1、定義:
2、基於定義打印
# -*- coding:utf-8 -*- # version:python3.7 n = 6 triangle = [[1],[1,1]] for i in range(2,n): #已經給出前兩行,所以求剩余行 cur = [1] #定義每行第一個元素 pre = triangle[i-1] #上一行 for j in range(i-1): #算幾次 cur.append(pre[j] + pre[j+1]) cur.append(1) triangle.append(cur) print(triangle) 執行結果: [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
# -*- coding:utf-8 -*- # version:python3.7 n = 6 triangle = [] for i in range(n): cur = [1] triangle.append(cur) #先追加進去 if i == 0: continue pre = triangle[i-1] for j in range(i-1): cur.append(pre[j] + pre[j+1]) cur.append(1) print(triangle)
3、補0法打印
# -*- coding:utf-8 -*- # version:python3.7 n = 6 triangle = [[1],[1,1]] for i in range(2,n): newrow = triangle[i-1] newrow.append(0) row = [None] * (i+1) #開辟空間 for j in range(i+1): row[j] = newrow[j-1] + newrow[j] triangle.append(row) print(triangle) 執行結果: [[1], [1, 1, 0], [1, 2, 1, 0], [1, 3, 3, 1, 0], [1, 4, 6, 4, 1, 0], [1, 5, 10, 10, 5, 1]]
4、根據對稱性打印(索引)
# -*- coding:utf-8 -*- # version:python3.7 n = 6 triangle = [[1],[1,1]] for i in range(2,n): row = [1] * (i+1) for j in range(i//2): #有圖知:大概的臨界值為一半,再仔細推敲 val = triangle[i-1][j] + triangle[i-1][j+1] row[j+1] = val row[i-j-1] =val #此處規律:兩個對稱值的索引和等於 i triangle.append(row) print(triangle) 執行結果: [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
5、單個列表覆蓋、切片完成
# -*- coding:utf-8 -*- # version:python3.7 n = 6 row = [1] * n for i in range(n): #n行n次 old = 1 #old剛開始為1 for j in range(i//2): val = old + row[j+1] old = row[j+1] #此處現將row[j+1]的值賦給old,以防止被覆蓋 row[j+1] = val if i != 2*j: row[i-j-1] = val
print(row[:i+1])
執行結果:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]