類似於這樣[x for x in range(101)],[x for x in range(10) if x % 2==0],[x*y for x in range(10) for y in range(10)]式子,就叫做列表推導式
列表推導式的好處就是能快速生成列表
列表推導式的好處就是浪費記憶體(空間複雜度太大),如果列表太過於龐大,它就會讓大量無用的資料佔據記憶體,所以我們應該用多少,生成多少
正因為列表推導式的一些弊端,為了彌補這些弊端,列表生成器產生了
如何將列表推導式裝換為列表生成器,[ 列表推導式 ] --> (列表推導式) # 就會變成乙個列表推導式
使用全域性函式next,呼叫一次next,返回下乙個值,直到最後丟擲異常,這樣就解決了列表推導式空間複雜度的問題
好處:節約記憶體
也可以使用迴圈迭代generator
生成器物件也存在乙個__next__魔方方法,等價於next全域性函式
函式轉換為列表生成器
當列表生成時,需要大量**來完成時,不可能使用列表推導式,一般使用函式完成,如:(斐波那契數列)
斐波那契數列:
從第三個元素開始,每乙個元素是前兩個元素之和
#如果函式中使用yield關鍵字,那麼這個函式的返回值就是乙個生成器
ls =
def feibo(n):
index = 0
first, second = 1, 1
while index
|-- yield關鍵字的作用
|-- 具有return的功能,能夠返回乙個函式的值
|-- 當乙個函式出現yield,那麼這個函式就被呼叫執行,而是返回值是乙個生成器
next它返回值,不斷地返回被yield的值
|-- yield值之後,會記住當前位置,下一次next函式呼叫生成器的時候,會在記住的位置
繼續執行
下面是yield的執行順序
def test_yeild(num):
print("yeild執行開始1")
index=0
while index第一次執行的結果是:
def test_yeild(num):
print("yeild執行開始1")
index=0
while index第二次的執行結果是:
yield執行的規律是每次執行以yield處開始,以yield處結束
Python中列表推導式
理解 舊的列表通過相應的邏輯生成新的列表。列表推導式 格式 表示式 for 變數 in 舊列表 或者 表示式 for 變數 in 舊列表 if 條件 過濾掉長度小於或者等於3的人名。names tom jason jack ha hey lilala result name for name in ...
python中的列表推導式
python裡面有個很棒的語法糖 syntactic sugar 它就是list comprehension,有人把它翻譯成 列表推導式 也有人翻譯成 列表解析式 名字聽上去很難理解,但是看它的語法就很清晰了。雖然名字叫做 list comprehension,但是這個語法同樣適用於dict set...
python中的列表推導式
所謂的列表推導式,就是指的輕量級迴圈建立列表。建立乙個0 10的列表 a x for x in range 11 print a 輸出結果 0,1,2,3,4,5,6,7,8,9 上面的列表推導式等價於下面,只是 非常簡化。a for x in range 10 建立乙個1 10之間偶數的列表 a ...