Python基礎筆記(一)--列表推導和生成器表達式

列表推導

列表推導的書寫形式:  
[表達式 for 變量 in 列表] 或者 [表達式 for 變量 in 列表 if 條件]
一個簡單的例子:

symbols = '%^&*()'
codes = [ord(symbol) for symbol in symbols]
print(codes)

輸出:[37, 94, 38, 42, 40, 41]

使用列表推導的原則是:只用列表推導來創建新的列表,并且盡量保持簡短,如果列表推導的代碼超過兩行,就需要考慮使用for循環重寫

一個稍微復雜點的例子--使用列表推導計算笛卡爾乘積:

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')]

生成器表達式

雖然列表推導可以用來生成遠足,數組或者其他序列類型,但是使用生成器表達式是更好的選擇。因為列表推導是先建立一個完整的列表,然后把這個列表傳遞到某個構造函數里,如果裂變的長度太長,占用的內存就比較多。而生成器表達式遵守迭代器協議,可以逐個地產生元素。
生成器表達式與列表推導形式差不多,只不過將[]換成()
例子:

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')

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容