列表推導
列表推導的書寫形式:
[表達式 for 變量 in 列表] 或者 [表達式 for 變量 in 列表 if 條件]
一個簡單的例子:
symbols = '%^&*()'
codes = [ord(symbol) for symbol in symbols]
print(codes)
輸出:[37, 94, 38, 42, 40, 41]
使用列表推導的原則是:只用列表推導來創(chuàng)建新的列表致份,并且盡量保持簡短,如果列表推導的代碼超過兩行积瞒,就需要考慮使用for循環(huán)重寫
一個稍微復雜點的例子--使用列表推導計算笛卡爾乘積:
colors = ['black', 'white']
sizes = ['S', 'M', 'L']
tshirts = [(color, size) for color in colors
for size in sizes]
print(tshirts)
輸出:[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'), ('white', 'M'), ('white', 'L')]
生成器表達式
雖然列表推導可以用來生成遠足榴嗅,數組或者其他序列類型霹陡,但是使用生成器表達式是更好的選擇。因為列表推導是先建立一個完整的列表,然后把這個列表傳遞到某個構造函數里惧盹,如果裂變的長度太長阀参,占用的內存就比較多肝集。而生成器表達式遵守迭代器協(xié)議,可以逐個地產生元素蛛壳。
生成器表達式與列表推導形式差不多杏瞻,只不過將[]換成()
例子:
colors = ['black', 'white']
sizes = ['S', 'M', 'L']
for tshirt in ((c,s) for c in colors for s in sizes):
print(tshirt)
輸出:
('black', 'S')
('black', 'M')
('black', 'L')
('white', 'S')
('white', 'M')
('white', 'L')