ইটারটুলস মডিউল ডক্সের একটি প্রাসঙ্গিক উদাহরণ এখানে :
import itertools
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = itertools.tee(iterable)
next(b, None)
return zip(a, b)
পাইথন 2 এর itertools.izipপরিবর্তে আপনার প্রয়োজন zip:
import itertools
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = itertools.tee(iterable)
next(b, None)
return itertools.izip(a, b)
এটি কীভাবে কাজ করে:
প্রথমে দুটি সমান্তরাল পুনরাবৃত্তকারী , aএবং bতৈরি করা হয় ( tee()কল), উভয়ই মূল পুনরাবৃত্তির প্রথম উপাদানটির দিকে নির্দেশ করে। দ্বিতীয় পুনরাবৃত্তকারী, b1 ধাপ এগিয়ে ( next(b, None)কল) সরানো হয় । এই মুহূর্তে as0 এবং bপয়েন্ট s1। উভয়ই aএবং bমূল পুনরুক্তি স্বাধীনভাবে অতিক্রম করতে পারে - izip ফাংশন দুটি পুনরুক্তি নেয় এবং একই গতিতে উভয় পুনরুক্তিকে অগ্রসর করে ফিরে আসা উপাদানগুলির জোড়া তৈরি করে।
একটি সতর্কতা: tee()ফাংশন দুটি পুনরুক্তি উত্পাদন করে যা একে অপরের থেকে স্বতন্ত্রভাবে অগ্রসর হতে পারে, তবে এটি ব্যয় করে আসে। যদি tee() পুনরুক্তিগুলির মধ্যে একটির অপরটির তুলনায় আরও অগ্রসর হয়, তবে দ্বিতীয় পুনরুক্তিকারকগুলি তাদের খুব কম পরিমাণ না হওয়া পর্যন্ত গ্রাসকারী উপাদানগুলিকে মেমরিতে রাখা দরকার (এটি মূল পুনরুক্তিকে 'রিওয়াইন্ড' করতে পারে না)। এখানে এটি গুরুত্বপূর্ণ নয় কারণ একটি পুনরাবৃত্তকারী অন্যটির চেয়ে 1 ধাপ এগিয়ে, তবে সাধারণভাবে এইভাবে প্রচুর স্মৃতি ব্যবহার করা সহজ।
এবং যেহেতু tee()একটি nপ্যারামিটার নিতে পারে, এটি দুটিরও বেশি সমান্তরাল পুনরাবৃত্তির জন্য ব্যবহার করা যেতে পারে:
def threes(iterator):
"s -> (s0,s1,s2), (s1,s2,s3), (s2, s3,4), ..."
a, b, c = itertools.tee(iterator, 3)
next(b, None)
next(c, None)
next(c, None)
return zip(a, b, c)