天天看點

《編寫高品質Python代碼的59個有效方法》——第10條:盡量用enumerate取代range

本節書摘來自華章社群《編寫高品質python代碼的59個有效方法》一書中的第10條:盡量用enumerate取代range,作者[美]布雷特·斯拉特金(brett slatkin),更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

第10條:盡量用enumerate取代range

在一系列整數上面疊代時,内置的range函數很有用。

對于字元串清單這樣的序列式資料結構,可以直接在上面疊代。

當疊代清單的時候,通常還想知道目前元素在清單中的索引。例如,要按照喜好程度列印出自己愛吃的冰淇淋口味。一種辦法是用range來做。

與單純疊代f?lavor_list或是單純使用range的代碼相比,上面這段代碼有些生硬。我們必須擷取清單長度,并且通過下标來通路數組。這種代碼不便于了解。

python提供了内置的enumerate函數,以解決此問題。enumerate可以把各種疊代器包裝為生成器,以便稍後産生輸出值。生成器每次産生一對輸出值,其中,前者表示循環下标,後者表示從疊代器中擷取到的下一個序列元素。這樣寫出來的代碼會非常簡潔。

還可以直接指定enumerate函數開始計數時所用的值(本例從1開始計數),這樣能把代碼寫得更短。

要點

enumerate函數提供了一種精簡的寫法,可以在周遊疊代器時獲知每個元素的索引。

盡量用enumerate來改寫那種将range與下标通路相結合的序列周遊代碼。

可以給enumerate提供第二個參數,以指定開始計數時所用的值(預設為0)。