必須知道的7個最有用的Python迭代器

面向對象的編程語言中提供了方便的容器,例如Map、List、Queue等,並且每類容器都是可迭代的,Python也不例外。Python的容器主要有列表、元組、字典和集合,它們也是可迭代的。意味著你可以調用迭代器函數iter()來遍歷各種容器。在迭代器遍歷容器的過程中,通常是使用next()函數來遍歷迭代器,使用for循環來不斷的從可迭代對象中實例化迭代器。本文主要介紹7個最有用的Python迭代器。

count

count()與range()類似,但是count()沒有界限。count() 函數需要一個起始值和一個可選的步長,輸出無窮大的值。count()特別適合遍歷輸出一個值直到滿足特定條件。以map容器為例,輸出n*n<1000的所有值:

必須知道的7個最有用的Python迭代器

cycle

顧名思義,cycle()函數是循環遍歷的迭代器。示例中是遍歷List,為List中每個數值添加標籤,標籤的範圍由range()給出:

必須知道的7個最有用的Python迭代器

chain

chain()迭代器可以將多個可迭代的對象連接在一起,以2個List連接為例:

必須知道的7個最有用的Python迭代器

starmap

starmap()將一個函數和一個可迭代的容器作為參數:

<code>itertools.starmap(function,  iterable)/<code>

starmap與map非常相似,不同之處在於,starmap允許輸入函數接受已經分組在可迭代容器中的多個參數,示例如下:

必須知道的7個最有用的Python迭代器

product

product()迭代器在參數中產生可迭代項的笛卡爾積,等效於使用多個嵌套循環,一般用來為所有項組合計算某些值。可選的repeat參數允許計算其自身的迭代笛卡爾積,例如:

必須知道的7個最有用的Python迭代器

islice

islice()用於從迭代器返回特定的切片。與一般的slice()函數非常相似。但是,slice()是對列表、元組的淺拷貝。與slice()相比,islice(iterable,start,stop,[step])除了iterable之外,語法幾乎與slice()完全相同,islice返回iterable,因此速度更快,因為元素是動態生成的。如果考慮程序的內存和效率,推薦使用islice()。需要注意的是islice()不能使用負索引。、

必須知道的7個最有用的Python迭代器

accumulate

accumulate()可以迭代地將特定的二進制函數應用於列表元素,並將聚合後的新值放在新的列表中。

必須知道的7個最有用的Python迭代器

總結

Python並不是一種函數式語言,但借用了許多的函數概念。通過將這些迭代器與容器相結合,極大的豐富了語言功能,簡化了代碼編寫,給用戶提供了一個快速高效的編寫環境。


分享到:


相關文章: