0Pricing
Python Academy · درس

itertools: المكرّرات اللانهائية والمحدودة

استخدم count وcycle وislice وchain وzip_longest

itertools: المكرّرات اللانهائية والمحدودة درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

ما هي itertools؟

‏itertools وحدة من المكتبة القياسية توفّر لبنات بناء لمكررات فعّالة في استهلاك الذاكرة. تُعيد جميع دوالها مكررات، وليس قوائم.

import itertools

# count: infinite counter
for i in itertools.islice(itertools.count(10, 2), 5):
    print(i, end=" ")  # 10 12 14 16 18

count()

ينتج count(start, step) متتالية حسابية لا نهائية. احرص دائمًا على استخدامه مع islice أو شرط إيقاف.

import itertools

for n in itertools.count(1, 10):
    if n > 40:
        break
    print(n, end=" ")  # 1 11 21 31 41

cycle()

يكرر cycle(iterable) الكائن القابل للتكرار إلى ما لا نهاية.

import itertools

colors = itertools.cycle(["red","green","blue"])
for _ in range(7):
    print(next(colors), end=" ")
# red green blue red green blue red

repeat()

يُنتج repeat(value, times) القيمة نفسها times مرة، أو إلى ما لا نهاية إذا لم تُحدَّد.

import itertools
print(list(itertools.repeat(42, 4)))   # [42, 42, 42, 42]
print(list(map(pow, range(5), itertools.repeat(2))))
# [0, 1, 4, 9, 16]

islice()

يقتطع islice(it, stop) أو islice(it, start, stop, step) مكررًا دون تحويله إلى عناصر فعلية في الذاكرة.

import itertools

result = list(itertools.islice(range(100), 2, 10, 2))
print(result)  # [2, 4, 6, 8]

chain()

يربط chain(*iterables) عدة كائنات قابلة للتكرار بالتتابع في مكرر واحد.

import itertools

result = list(itertools.chain([1,2], [3,4], [5]))
print(result)  # [1, 2, 3, 4, 5]

# chain.from_iterable for a list of iterables:
nested = [[1,2],[3,4]]
print(list(itertools.chain.from_iterable(nested)))

zip_longest()

يُجري zip_longest عملية zip على كائنات قابلة للتكرار ذات أطوال مختلفة، ويملأ القيم المفقودة باستخدام fillvalue.

import itertools

a = [1, 2, 3]
b = ["a", "b"]
print(list(itertools.zip_longest(a, b, fillvalue=0)))
# [(1, "a"), (2, "b"), (3, 0)]

dropwhile() وtakewhile()

يُنتج takewhile(pred, it) العناصر ما دامت دالة الاختبار صحيحة. أما dropwhile فيفعل العكس.

import itertools

nums = [1, 3, 5, 6, 7, 9]
print(list(itertools.takewhile(lambda x: x % 2, nums)))
# [1, 3, 5]

print(list(itertools.dropwhile(lambda x: x % 2, nums)))
# [6, 7, 9]

filterfalse()

يُنتج filterfalse(pred, it) العناصر التي تكون فيها دالة الاختبار False — أي مكمل filter().

import itertools

evens = list(itertools.filterfalse(lambda x: x%2, range(10)))
print(evens)  # [0, 2, 4, 6, 8]

starmap()

يطبّق starmap(func, iterable) دالةً على كل صف من الوسائط ضمن كائن قابل للتكرار.

import itertools, operator

pairs = [(2,3),(4,5),(1,10)]
result = list(itertools.starmap(operator.mul, pairs))
print(result)  # [6, 20, 10]

groupby()

تجمع groupby(it, key) العناصر المتتالية التي لها قيمة المفتاح نفسها. رتّب الكائن القابل للتكرار أولًا للحصول على تجميع صحيح.

import itertools

data = sorted([("a",1),("b",2),("a",3)], key=lambda x:x[0])
for key, group in itertools.groupby(data, key=lambda x:x[0]):
    print(key, list(group))

تحقق سريع

ماذا ينتج itertools.chain([1,2], [3,4])؟

مراجعة

توفر itertools مكررات لا نهائية (count وcycle وrepeat)، واقتطاعًا (islice)، ودمجًا (chain وzip_longest)، وتصفيةً (takewhile وdropwhile وfilterfalse). وجميعها كسولة وفعّالة في استهلاك الذاكرة.

الأسئلة الشائعة

هل درس «itertools: المكرّرات اللانهائية والمحدودة» مجاني؟

نعم — نص درس «itertools: المكرّرات اللانهائية والمحدودة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «itertools: المكرّرات اللانهائية والمحدودة»؟

استخدم count وcycle وislice وchain وzip_longest تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «itertools: المكرّرات اللانهائية والمحدودة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. itertools: المكرّرات اللانهائية والمحدودة
  2. itertools: التوافقيات
  3. functools: ‏partial وreduce
  4. functools: ‏lru_cache وcached_property
← العودة إلى Python Academy