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。
最後,對於這個簡短的條目,我想談談產品,a
笛卡兒積的實現。
可用於取代循環通過兩個資料流的嵌套:
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
接收一個參數,允許我們計算a的笛卡爾積
與自身的序列:
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 標準函式庫。希望對你有用。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3