python實現楊輝三角


剛剛學python,原來用c++,Java很輕松實現的楊輝三角,現在用python實現,代碼是少了,理解起來卻不容易啊。

這里主要用到的Python的生成器。

我們都知道Python有列表解析功能,根據表達式可以自動生成列表,如:

# 這樣就得到了0-9這幾個數的平方
my_list = [x**2 for x in range(10)] print(my_list)          # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 
print(type(my_list))    # <class 'list'>

但是列表的大小受內存的限制,如果我們能記錄產生數據的算法,那么就不用構造完整的列表,只需要邊循環邊產生數據。

下面就來創建一個簡單的生成器:

# 創建一個簡單的生成器
gen = (x * x for x in range(10)) print(type(gen))           # <class 'generator'>
for item in gen: print(item, end=" ")   # 0 1 4 9 16 25 36 49 64 81

除了用for遍歷生成器對象,還可以用next()函數進行遍歷

# 創建一個簡單的生成器
gen = (x * x for x in range(10)) print(type(gen))           # <class 'generator'>
print(next(gen))           # 0
print(next(gen))           # 1
print(next(gen))           # 4
print(next(gen))           # 9
print(next(gen))           # 16

當沒有更多元素用於遍歷時,會拋出StopIteration異常

 當函數中有yield關鍵字時,函數會變成生成器:

def gen_func(): n = 1
    while True: yield n * 2 - 1    # 程序運行到yield會中斷一次,下次再執行時從上次中斷位置開始
        n += 1 f = gen_func() print(type(f))             # <class 'generator'>
n = 1                      # 控制打印次數
for item in f: print(item, end=" ")   #1 3 5 7 9 11 13 15 17 
    n += 1
    if n == 10: break
  • 生成器函數的執行流程不一樣。
  • 函數是順序執行,遇到return語句或最后一行語句時返回。
  • 生成器是在每次調用next()時候執行,遇到yield語句時返回,當再次調用next()時,從上次返回的yield語句處繼續執行。

 下面來實現楊輝三角:

思路是初始化第一行的元素列表,依次生成下一行的元素列表

def triangle(): line = [1]         # 第一行就一個元素1
    while True: yield line # 生成下一行,表達式為 : [1] + 上一行的兩個元素之和 + [1]
        line = [1] + [line[i] + line[i + 1] for i in range(len(line) - 1)] + [1] n = 0     # 控制輸出行數
for item in triangle(): print(item) n += 1
    if n % 10 == 0: break

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM