題目
代碼對(duì)比:
以下是我思考后寫出的代碼:
def triangles(): # 定義一個(gè)generator function
list1 = [1] # 第一行
list2 = [1, 1] # 第二行
yield list1
while True:
yield list2
list1 = list2
list2 = [list1[i] + list1[i + 1] for i in range(len(list1) - 1)]
list2.append(1) # 在首尾各加一個(gè)1
list2.insert(0, 1)
n = 0
for i in triangles(): # 調(diào)用定義好的generator function
print(i)
n = n + 1
if n == 10: # 打斷程序
break
結(jié)果如下
[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]
下面是我在評(píng)論區(qū)看到的一個(gè)其他網(wǎng)友寫的答案
def triangles():
L = [1]
while True:
yield L
L = [L[x] + L[x + 1] for x in range(len(L) - 1)] #初始化L
L.insert(0, 1)
L.append(1)
n = 0
for t in triangles():
print(t)
n = n + 1
if n == 10:
break
輸出的結(jié)果是一樣的议谷。
顯然亲桥,網(wǎng)友的答案比我的好!
分析
我試圖分析他的代碼蒋情。
比較可知眷茁,我們?cè)诮鉀Q這個(gè)題目的方向是一樣的,用list下標(biāo)痴怨、append()忙干、insert()來實(shí)現(xiàn)楊輝三角。
但是網(wǎng)友處理的更好: 第二行(1, 1)也是通過列表生成式得到的浪藻。這樣處理的結(jié)果使得list只需創(chuàng)建一個(gè)捐迫,代碼量也減少了許多。
for i in range(0, 0)
這樣的代碼不會(huì)進(jìn)行迭代爱葵。
我相信我如果再認(rèn)真推敲我的代碼施戴,同樣也能做到這個(gè)程度。但是
- 我浮躁
- 可能那位網(wǎng)友直接就在腦子里得到的TA的代碼萌丈,Ta有更棒的腦子赞哗。
我要努力!