列表表達式:
(1) 語法1:[表達式 for 變量 in 列表],表示把得到的每一個變量值都放到 for 前面的表達式中計算 ,然后生成一個列表
(2) 語法2:[表達式 for 變量 in 列表 if 條件],如果加上 if 判斷,則表示把每一個變量值進行判斷,如果判斷正確再交給表達式進行計算,然后生成一個列表
In [4]: [i*2 for i in range(10)] Out[4]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] In [5]: [i*2 for i in range(10) if i == 4] Out[5]: [8]
生成器表達式:
(1) 生成器是一個特定的函數,允許返回一個中間值,然后掛起代碼的執行,稍后再恢復執行
(2) 列表表達式的結果會以列表的形式一次性返回所有的數據,如果數據量很大,就會很占內存,所以不適用於迭代大量的數據
(3) 生成器表達式的結果則會返回一個生成器對象,只有當我們去調用這個對象的時候才會讀取里面的值,因此生成器表達式是一個對內存使用友好的結構
(4) 生成器表達式的語法跟列表表達式的語法是一樣的,只是把中括號換成圓括號,如:(表達式 for 變量 in 列表 if 條件)
In [7]: (i*2 for i in range(10)) # 可以看到返回的是一個生成器對象 Out[7]: <generator object <genexpr> at 0x7fc951b52050> In [8]: for i in (i*2 for i in range(10)): # 只有被調用的時候才會讀取里面的值 ...: print(i), ...: 0 2 4 6 8 10 12 14 16 18