理解Python 中不帶方括號的列表推導式
您可能已經注意到,在使用列表推導式時,有時可以省略方括號[] Python,如下例所示:
''.join( str(_) for _ in xrange(10) )
這種行為可能看起來令人費解,但這是因為括號內的表達式實際上是生成器表達式,而不是列表推導式。
生成器表達式與列表推導式
生成器表達式在語法上類似於列表推導式,但它們使用括號而不是方括號。與在記憶體中建立新列表的列表推導式不同,生成器表達式會根據需要一次產生一個元素。
這種差異在某些情況下非常顯著,例如當您正在使用的可迭代物件很大或具有無限多個元素。在這種情況下,生成器表達式比列表理解更節省記憶體且速度更快。
效能注意事項
但是,請務必注意這種差異效能上的影響可能並非在所有情況下都很明顯。例如,如果您正在使用小型迭代器,則從生成器表達式建立清單的開銷可能會超過其記憶體效率的好處。
在 ''.join() 的特定情況下,使用列表理解實際上既更快又更節省記憶體。這是因為 join 需要對資料進行兩次傳遞,因此它受益於立即可用的真實清單。
選擇最佳方法的提示
決定時是否使用生成器表達式或列表來理解,請考慮以下因素:
最終,由您決定哪種方法最適合您的特定情況。
以上是列表推導式與生成器表達式:何時在 Python 中使用括號而不是方括號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!