1. 程式人生 > 其它 >python楊輝三角_python中的部分高階特性

python楊輝三角_python中的部分高階特性

技術標籤:python楊輝三角楊輝三角python程式碼

程式碼環境:python3.6

列表生成式

建立一個 list,python 內建了一個非常簡潔卻強大的方式。

舉個例子,生成一個[1, 2, 3, 4, 5]的 list,可以用:

[

如果我們要生成一個偶數的 list,可以用:

[

我們還可以用兩層迴圈(三層及三層迴圈以上很少用)實現多種組合,舉例:

[

生成器 generator

通過列表生成式,我們可以直接建立一個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,建立一個包含 100 萬個元素的列表,不僅佔用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素佔用的空間都白白浪費了。

所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的 list,從而節省大量的空間。在 python 中,這種一邊迴圈一邊計算的機制,稱為生成器:generator。

generator 最常建立的方法有兩種:

  1. 將列表生成式裡面的[]改成()
  2. 在一個函式中,如果包含yield關鍵字,這個函式就是 generator。

而使用 generator 也有兩種方法:

  1. 假如我們有一個生成器物件gen,可以直接用next(gen)不斷獲得下一個返回值(這種方法基本很少用到),直到gen丟擲異常StopIteration
  2. 只需要用 for 迴圈依次輸出元素即可,程式碼遇到StopIteration
    會直接停止輸出。(最常用)

下面我們就建立 generator 的兩種方法進一步說明。

第一種方法在程式碼邏輯簡單的時候最方便,舉個例子:

gen 

第二種方法適用於邏輯複雜的狀況,我們用程式碼實現 楊輝三角,將每行看做一個 list,不斷輸出下一行的 list:

57d7c23f267af88fb607884448f1a6f9.png
def 

可迭代物件 iterable、迭代器 iterator

  1. 可作用於 for 迴圈的物件都是 iterable 型別;
  2. 一個物件,如果定義了__iter____next__這兩個方法,它就是迭代器。我們可以簡單理解為:可作用於next()函式的物件都是 iterator 型別。

list、dict、str 都是 iterable,但不是 iterator,因為它們沒有實現__next__

方法。但我們可以使用iter()函式把 iterable 變成 iterator,比如iter([1, 2, 3])就是一個 iterator。

注意:上面我們講到的 generator,就是一個 iterator,因為 generator 自動建立了 __iter____next__這兩個函式;但反過來,iterator 不一定是 generator。