第10條 enumerate 代替range & zip同時遍歷兩個迭代器

1.xrange代替range

一般情況下,需要產生一定範圍內的數字時,會使用range函數

L = 100
for i in range(L):
    print(i)

但是,當L很大時,range(L)會首先生成一個大列表,需要消耗大量內存,影響性能。xrangerange用法相同,但是其返回的是object對象,不會一次性生成列表,通過for的迭代,逐個生成每個數字,類似於生成器。

L = 100
for i in xrange(L):
    print(i)

注意:Python 3.x已經去掉xrange,全部用range代替。

2. enumerate代替range

Python提供的enumerate函數可以同時獲取元素的indexvalue.

array = [1,2,3,4,5]
for index, value in enumerate(array):
    print(index)
    print(value)

同時,可以給enumerate提供第二個參數,指定開始計數時所用的值(默認爲0)

for index,value in enumerate(array,1): # 從1開始計數
    print(index)
    print(value)
3.zip同時遍歷兩個迭代器

在編寫Python程序中,有時候會涉及到多個列表對象,與此同時,也會同時遍歷多個有關聯的對象。

可以使用zip平行地遍歷多個迭代器

names = ['bob','john','lisa']
ages = [19,20,32]
for name,age in zip(names,ages):
    print("%s's age is %s"%(name,age))

zip機制:可以把兩個或者兩個以上的迭代器封裝成生成器,在利用for遍歷過程中,會從每個迭代器中獲取該迭代器的下一個值,然後將這些值打包成tuple返回。

注意:當兩個迭代器長度不一樣時,只要有一個耗盡,那麼zip將不再返回元組,提前終止。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章