Python列印楊輝三角
阿新 • • 發佈:2019-02-13
最近在看廖雪峰的python教程,學到生成器時用生成器輸出楊輝三角
輸出的結果如下:def triangles(): L1=[] L2=[] m=0 while True: if m==0: L1.append(1) elif m==1: L1.append(1) else: for k in range(len(L1)): #print(k) if k!=0: L1[k]=L2[k]+L2[k-1] L1.append(1) L2=L1 m=m+1 yield L1 n = 0 for t in triangles(): print(t) n = n + 1 if n == 10: break
[1]
[1, 1]
[1, 2, 1]
[1, 3, 4, 1]
[1, 4, 8, 9, 1]
[1, 5, 13, 22, 23, 1]
[1, 6, 19, 41, 64, 65, 1]
[1, 7, 26, 67, 131, 196, 197, 1]
[1, 8, 34, 101, 232, 428, 625, 626, 1]
[1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1]一直沒找到原因,後來通過百度發現是列表的引用問題。學習網址
因為在L2=L1進行賦值值時,L2是對L1的引用,這2個list指向了同一片記憶體,所以L1[k]=L2[k]+L2[k-1]
這個語句其實就一直改掉了L2的資料。只要將L2=L1改為L2=L1[:]就可以啦,正確結果如下:[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
網上找到的比較簡潔的方式:def triangles(): L = [1] while True: yield L L.append(0); L = [L[i-1] + L[i] for i in range(len(L))]