列表解析:
語法:[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