List列表生成器和列表解析

列表解析:
語法:[expr for iter_var in iterable] 或 [expr for iter_var in iterable if cond_expr]

說明:
第一種語法:首先迭代iterable裏全部內容,每一次迭代,都把iterable裏相應內容放到iter_var中,再在表達式中應用該iter_var的內容,最後用表達式的計算值生成一個列表。
第二種語法:加入了判斷語句,只有知足條件的內容才把iterable裏相應內容放到iter_var中,再在表達式中應用該iter_var的內容,最後用表達式的計算值生成一個列表。
python

舉例:app

>>>[i + 1 for i in range(10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> [i + 1 for i in range(10) if i % 2]
[2, 4, 6, 8, 10]


生成器表達式:
語法:(expr for iter_var in iterable) 或 (expr for iter_var in iterable if cond_expr)

說 明:列表解析是比較早的Python版本里就引進的(好像是2.0版本),而生成器表達式則是在2.4中引入的新內容,它和列表解析的語法很像,可是在大數據量處理時,生成器表達式的優點就體現出來了,由於它的內存使用方式更好,效率更高,它並不建立一個列表,只是返回一個生成器。固然,列表解析並不會被 遺棄。

舉例:大數據

>>> (i + 1 for i in range(10) if i % 2)
<generator object <genexpr> at 0x011DC5D0>

>>> g = (i + 1 for i in range(10) if i % 2)
>>> l = []
>>> for j in g:
           l.append(j)
>>> l
[2, 4, 6, 8, 10]


從上面可看出,列表解析和生成器表達式語法雖然很像,但實質上仍是有很大不一樣的。
spa

相關文章
相關標籤/搜索