فصل سوم: جنراتورها و ایتریتورها

ماژول itertools برای ترکیب و پردازش داده

ابزارهای آماده برای کار با ایتریتورها

ماژول استاندارد itertools مجموعه‌ای از توابع کارآمد برای کار با ایتریتورها فراهم می‌کند که نوشتن دستی آن‌ها زمان‌بر و مستعد خطا است.

from itertools import chain, cycle, islice, count

a = [1, 2, 3]
b = [4, 5, 6]
print(list(chain(a, b)))          # [1, 2, 3, 4, 5, 6]

counter = count(start=10, step=5)
print(list(islice(counter, 4)))   # [10, 15, 20, 25]

در این مثال، chain چند ایتریبل را پشت‌سر‌هم متصل می‌کند، count یک شمارنده‌ی بی‌نهایت با گام دلخواه می‌سازد و islice بخشی از یک ایتریتور (حتی بی‌نهایت) را بدون نیاز به تبدیل کامل آن به لیست استخراج می‌کند.

تابع groupby نیز برای دسته‌بندی داده‌های مرتب‌شده بر اساس یک کلید بسیار پرکاربرد است:

from itertools import groupby

words = ["apple", "ant", "bear", "bee", "cat"]
for letter, group in groupby(words, key=lambda w: w[0]):
    print(letter, list(group))

نکته‌ی مهم این است که groupby فقط عناصر پیوسته با کلید یکسان را در یک گروه قرار می‌دهد، پس معمولاً پیش از استفاده از آن باید داده را بر اساس همان کلید مرتب کرد. تسلط به itertools کد پردازش داده را کوتاه‌تر، سریع‌تر و کم‌حافظه‌تر می‌کند.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.