首頁  >  文章  >  後端開發  >  發現 itertools

發現 itertools

WBOY
WBOY原創
2024-09-03 10:40:01599瀏覽

Descubriendo itertools

Itertools 是最有趣的 Python 函式庫之一。它包含一系列受函數式語言啟發的函數,用於與迭代器一起使用。

在這篇文章中,我將提到一些最吸引我注意並且值得牢記的內容,以免每次都重新發明輪子。

數數

好幾次我都實現了無限計數(好了,結束了
明確地在某一點用中斷)使用 while True 迴圈。 itertools 為我們提供了更好的選擇:

    from itertools import count

    for i in count(start=2, step=2):
        if i > 10:
            break
        print(i)

    2
    4
    6
    8
    10

從範例中可以看出,如果沒有中斷,count 將傳回無限多個數字。上面的程式碼大致相當於:

    i = 2

    while True:
        if i > 10:
            break

        print(i)
        i += 2

    2
    4
    6
    8
    10

分批的

一個執行非常常見操作的函數:從大小為 n 的批次中的序列中取得資料。讓我們來看一個例子:

from itertools import batched

    sequence = [1, 2, 3, 4, 5, 6, 7]

    for batch in batched(sequence, 2):  # lotes de tamaño 2
        print(batch)
    (1, 2)
    (3, 4)
    (5, 6)
    (7,)

要注意的是,最後一批的大小可能小於或等於 n,如本例所示。非常有用,你不覺得嗎?

成對的

另一個簡單而有用的功能。給定一個序列(實際上,給定一個迭代器),它成對地給我們它的元素。

讓我們透過一個例子來更好地了解它:

from itertools import pairwise

    sequence = [1, 2, 3, 4, 5, 6, 7]

    for a, b in pairwise(sequence):
        print(a, b)
    1 2
    2 3
    3 4
    4 5
    5 6
    6 7

對的數量比輸入序列的大小少 1。

產品

最後,對於這個簡短的條目,我想談談產品,一個
笛卡兒積的實現。

可用來取代循環兩個資料流的巢狀:

from itertools import product

    A = [1, 2, 3]
    B = [5, 6, 7]

    for a, b in product(A, B):
        print(a, b)
   1 5
    1 6
    1 7
    2 5
    2 6
    2 7
    3 5
    3 6
    3 7

接收一個參數,允許我們計算
的笛卡爾積 與自身的序列:

   from itertools import product

    A = [1, 2, 3]

    for a1, a2, a3 in product(A, repeat=3):
        print(a1, a2, a3)
    1 1 1
    1 1 2
    1 1 3
    1 2 1
    1 2 2
    1 2 3
    1 3 1
    1 3 2
    1 3 3
    2 1 1
    2 1 2
    2 1 3
    2 2 1
    2 2 2
    2 2 3
    2 3 1
    2 3 2
    2 3 3
    3 1 1
    3 1 2
    3 1 3
    3 2 1
    3 2 2
    3 2 3
    3 3 1
    3 3 2
    3 3 3

在以後的文章中,我將提到這個有用的
模組的其他功能 python 標準函式庫。希望對你有用。

以上是發現 itertools的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn