【Python】生成器和楊輝三角
生成器
在python中,一邊迴圈一邊計算的機制,稱為生成器(generator)。generator儲存的是演算法,它也是可迭代物件。
建立generator:
方法一:將一個列表生成式的[]改成()。
方法二:將print(b)改為yield b。
執行過程:
generator和函式的執行流程不一樣。函式是順序執行,遇到return語句或者最後一行函式語句就返回。而變成generator的函式,在每次呼叫next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。利用for迴圈來迭代列印。
練習:楊輝三角
把每一行看做一個list,試寫一個generator,不斷輸出下一行的list:
# 期待輸出:
# [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]
n = 0
for t in triangles():
print(t)
n = n + 1
if n == 10:
break
以下程式碼是”@其實我姓謝“同學的。
程式碼如下:
def triangles():
L = [1]
while True:
yield L
L.append(0)
L = [L[i-1]+L[i] for i in range(len(L))]
n=0
a = input("請輸入楊輝三角的行數:")
for t in triangles():
print(t)
n = n+1
if n == int(a):
break
【分析】
L = [1]每一行第一個元素都是1。
進入迴圈。
列印L。
對與N行來說,只要知道N-1行,就可以得出N行的元素,因為每一行的元素都由上一行的元素的左右元素相加得到的,然而N行的最後一個元素由N-1的最後一個元素再加0得到的,因為N-1少一個元素,所以就是新增0的作用。
此行是關鍵,range(len(L))得到的使0到x-1的數,len(L)計算該L有幾個元素,L[i-1]+L[i],使得相鄰的兩個元素相加,以次列印出來。
相關文章
- python 學習-使用生成器輸出楊輝三角和斐波拉契數列Python
- Python楊輝三角演算法Python演算法
- java楊輝三角Java
- 使用python生成楊輝三角形Python
- 08_楊輝三角
- 楊輝三角形
- 楊輝三角列印10行
- Golang 遞迴列印楊輝三角Golang遞迴
- js中實現楊輝三角JS
- Java基礎——列印楊輝三角Java
- 使用指令碼列印楊輝三角指令碼
- 楊輝三角形 (用陣列和遞迴)陣列遞迴
- c語言筆記:楊輝三角C語言筆記
- 使用佇列實現楊輝三角佇列
- 杭電OJ 2032楊輝三角
- Python計算組合數生成楊輝三角形Python
- 經典演算法(5)楊輝三角演算法
- 佇列(楊輝三角)——鏈式佇列佇列
- 楊輝三角與陣列遞迴累加陣列遞迴
- 增補部落格 第十八篇 python 楊輝三角形Python
- LeetCode 118. 楊輝三角LeetCode
- Pascal's Triangle leetcode java(楊輝三角)LeetCodeJava
- 藍橋杯-基礎練習-楊輝三角形(Python)AC程式碼PythonC程式
- leetcode第一百一十九題:楊輝三角ⅡLeetCode
- leedcode每日一題:118. 楊輝三角每日一題
- POJ3187Backward Digit Sums[楊輝三角]Git
- 微課|中學生可以這樣學Python(例6.1):楊輝三角形Python
- LeetCode每日一題: 楊輝三角(No.118)LeetCode每日一題
- 前端演算法題:JS遞迴實現楊輝三角前端演算法JS遞迴
- 楊輝三角的5個特性,一個比一個牛皮!
- java二維陣列定義初始化-楊輝三角Java陣列
- 組合數的計算(利用楊輝三角/記憶化搜尋)
- 小米筆試:“楊輝三角”&“排排坐吃果果”|掘金技術徵文筆試
- 實驗四:採用一維陣列輸出等腰三角形的楊輝三角。陣列
- 藍橋杯第五屆JavaC組楊輝三角問題解決方法Java
- 組合數取模的幾種方法--Exlucas&楊輝三角&組合
- python列表生成式和生成器Python
- 1.5.4 Python迭代器和生成器Python