কম্পিউটার

Python ফাংশন দক্ষ লুপিংয়ের জন্য পুনরাবৃত্তিকারী তৈরি করে


বেশিরভাগ প্রোগ্রামিং ভাষার মতো পাইথন একটি লুপিং কনস্ট্রাক্ট তৈরি করার সময় এবং স্টেটমেন্ট প্রদান করে। ফর স্টেটমেন্ট বিশেষ করে লিস্ট, টিপল বা স্ট্রিং এর মত পুনরাবৃত্তির জন্য উপযোগী। পাইথনের স্ট্যান্ডার্ড লাইব্রেরির itertools মডিউলে আরও দক্ষ এবং দ্রুত পুনরাবৃত্তির সরঞ্জামগুলি সংজ্ঞায়িত করা হয়েছে। এই পুনরাবৃত্ত বিল্ডিং ব্লকগুলি হসকেল এবং এসএমএল-এর মতো কার্যকরী প্রোগ্রামিং ভাষার অনুরূপ সরঞ্জামগুলির পাইথনিক বাস্তবায়ন।

itertools মডিউলের ফাংশন তিন প্রকার।

  • অসীম পুনরাবৃত্তিকারী
  • সসীম পুনরাবৃত্তিকারী
  • কম্বিনেটরিক ইটারেটর

নিম্নলিখিত ফাংশনগুলি অসীম ক্রম তৈরি করে৷

গণনা() − এই ফাংশনটি প্রারম্ভিক মান থেকে সমানভাবে ব্যবধানযুক্ত মানের একটি পুনরাবৃত্তিকারী প্রদান করে। এই ব্যবধানে ক্রমাগত মান বাড়াতে ফাংশনের ঐচ্ছিক ধাপ মান থাকতে পারে।

>>> from itertools import count
>>> for x in count(20):
print (x)
>>> for x in count(100,10):
print (x)

প্রথম বিবৃতিটি 20 থেকে শুরু করে অসীম ক্রম তৈরি করবে এবং দ্বিতীয়টি 100 থেকে স্টেপিং ফ্রিকোয়েন্সি সহ সংখ্যা তৈরি করবে। মনে রাখবেন যে লুপগুলি অসীম এবং তাদের নিজের থেকে শেষ হবে না। ctrl-C

চাপলে সেগুলি বন্ধ হয়ে যাবে

চক্র() − এই ফাংশনটি প্রদত্ত পুনরাবৃত্তিযোগ্য থেকে প্রতিটি উপাদান ফিরিয়ে দিতে শুরু করে এবং এর অনুলিপি সংরক্ষণ করে। উপাদানগুলি শেষ হয়ে গেলে, সংরক্ষিত অনুলিপিতে উপাদানগুলি ফিরে আসে যার ফলে অসীম লুপ তৈরি হয়৷

>>> from itertools import cycle
>>> for x in cycle("hello"):
print (x)

কীবোর্ড বাধা Ctrl-C জারি না হওয়া পর্যন্ত স্ট্রিংয়ের অক্ষরগুলি পুনরাবৃত্তিমূলকভাবে মুদ্রণ করা হবে৷

পুনরাবৃত্তি() − এই ফাংশন বারবার অবজেক্ট আর্গুমেন্ট রিটার্ন করে। যদি দ্বিতীয় যুক্তি 'বার' প্রদান করা হয়, তাহলে পুনরাবৃত্তি অনেকবার হয়।

>>> from itertools import repeat
>>> for x in repeat(1):
print (x)
>>> for x in repeat('hello', 10):
print (x)

প্রথম লুপ অবিরামভাবে 1 প্রিন্ট করবে। দ্বিতীয়টি 10 ​​বার 'হ্যালো' প্রিন্ট করে।

নিম্নোক্ত বিভাগের ফাংশনগুলি সীমিত পুনরাবৃত্ত প্রদান করে যা সংক্ষিপ্ততম ইনপুট সিকোয়েন্সে সমাপ্ত হয়।

জমা () - এই ফাংশনের দুটি পরামিতি রয়েছে। প্রথমে একটি পুনরাবৃত্তিযোগ্য (তালিকা, টিপল বা স্ট্রিং)। ডিফল্টরূপে দ্বিতীয় প্যারামিটারটি হল operator.add() (অপারেটর মডিউলে ফাংশন যা স্ট্যান্ডার্ড সংযোজন অপারেটর বাস্তবায়ন করে), তবে দুটি সংখ্যাসূচক প্যারামিটার প্রাপ্ত অন্য কোনো ফাংশন হতে পারে।

accumulate(sequence, func)

ইনপুট ক্রম প্রথম দুটি উপাদান func দ্বারা প্রক্রিয়া করা হয়. প্রক্রিয়ার ফলাফল হল পরবর্তী পুনরাবৃত্তির জন্য প্রথম প্যারামিটার এবং ফাঙ্কের দ্বিতীয় প্যারামিটারটি ইনপুট সিকোয়েন্সের তৃতীয় উপাদান। ক্রমটি শেষ না হওয়া পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি করা হয়। অ্যাকুমুলেট ফাংশন একটি ইটারেটর প্রদান করে যেখানে প্রতিটি উপাদান ক্রমাগত উপাদান প্রক্রিয়াকরণের ফলাফল জমা হয়।

নিম্নলিখিত উদাহরণে, তালিকার সংখ্যাগুলি ক্রমবর্ধমানভাবে যোগ করা হয়েছে। মনে রাখবেন যে ডিফল্ট ফাংশন আর্গুমেন্ট হল অ্যাড অপারেশন।

>>> from itertools import accumulate
>>> list(accumulate([1,2,3,4,5]))
[1, 3, 6, 10, 15]

আমরা একটি ব্যবহারকারীর সংজ্ঞায়িত ফাংশনকে দ্বিতীয় প্যারামিটার হিসাবে জমা করতে পারি () ফাংশন

>>> def multiply(x,y):
return x*y
>>> list(accumulate([1,2,3,4,5], multiply))
[1, 2, 6, 24, 120]

এই আচরণ কিছুটা বিল্ট-ইন reduce() ফাংশনের অনুরূপ। reduce() ফাংশন শুধুমাত্র সঞ্চয়ের চূড়ান্ত ফলাফল প্রদান করে, যেখানে accumulate() সমস্ত মধ্যবর্তী ফলাফলের পুনরাবৃত্তিকারী তৈরি করে।

চেইন() - এই ফাংশনে প্যারামিটার হিসাবে একাধিক পুনরাবৃত্তিযোগ্য থাকতে পারে। এটি প্রথম পুনরাবৃত্তিযোগ্য প্রতিটি উপাদানকে ফলস্বরূপ পুনরাবৃত্তিকারীতে পরিণত করে এবং পুনরাবৃত্তিযোগ্য পরামিতিগুলি শেষ না হওয়া পর্যন্ত পরবর্তীতে চলে যায়৷

>>> from itertools import chain
>>> list(chain([10,20],'hello',range(4)))
[10, 20, 'h', 'e', 'l', 'l', 'o', 0, 1, 2, 3]

ড্রপওয়াইলে() − যতক্ষণ পূর্বনির্ধারিত ফাংশন আর্গুমেন্ট সত্য হয় ততক্ষণ এই ফাংশনটি terable থেকে উপাদানগুলি বাদ দিয়ে একটি পুনরাবৃত্তিকারী প্রদান করে। যে মুহুর্তে ফাংশনটি মিথ্যা প্রত্যাবর্তন করে, অবশিষ্ট সমস্ত উপাদান পুনরাবৃত্তিকারীর কাছে প্রদান করা হয়।

>>> from itertools import dropwhile
>>> def iseven(x):
if x % 2 == 0:
return True
else:
return False
>>> list(dropwhile(iseven, [12,90,61,4,15]))
[61, 4, 15]

ফিল্টারফল() − এই ফাংশনটি এমন উপাদানগুলিকে ফিল্টার করে একটি পুনরাবৃত্তিকারী প্রদান করে যার জন্য পূর্বনির্ধারিত ফাংশনের ফলাফল মিথ্যা হয়৷

>>> from itertools import filterfalse
>>> def iseven(x):
if x % 2 == 0:
return True
else:
return False
>>> list(filterfalse(iseven, [12,90,61,4,15]))
[61, 15]

islice() - এই ফাংশনটি পুনরাবৃত্তিযোগ্য থেকে নির্দিষ্ট উপাদান নির্বাচন করে একটি পুনরাবৃত্তিকারী তৈরি করে। নির্বাচনের মানদণ্ড স্টার্ট, স্টপ এবং স্টেপ প্যারামিটারের উপর নির্ভর করে। নির্বাচন প্রারম্ভিক মান থেকে শুরু হয় এবং স্টপ মান পর্যন্ত চলতে থাকে। যদি স্টপ কোনটি না হয়, এটি পুনরাবৃত্তিযোগ্য শেষ পর্যন্ত যায়, অন্যথায় নির্বাচন নির্দিষ্ট সূচকে থামে। ধাপ প্যারামিটার 1 ডিফল্টরূপে। ধাপ পরামিতি দ্বারা উপাদান বৃদ্ধির নির্বাচন. কোন প্যারামিটার নেতিবাচক হতে পারে না।

>>> from itertools import islice
>>> list(islice(range(10),1,5,2))
[1, 3]
>>> list(islice(range(10),0,None,3))
[0, 3, 6, 9]
>>> list(islice(range(10),5,None))
[5, 6, 7, 8, 9]
>>> list(islice(range(10),5))
[0, 1, 2, 3, 4]

নিম্নলিখিত ফাংশন পুনরাবৃত্তিযোগ্য বস্তু থেকে কম্বিনেটরিক পুনরাবৃত্তিকারী তৈরি করে।

পণ্য() − এই ফাংশনটি একটি পুনরাবৃত্তিকারী তৈরি করে যা ইনপুট সিকোয়েন্সের উপাদানগুলির একটি কার্টেসিয়ান পণ্য। এটি লুপের জন্য নেস্টেড নির্মাণের সমতুল্য, প্রতিটি পুনরাবৃত্তিযোগ্য ক্রম অতিক্রম করার জন্য একটি।

নিম্নলিখিত উদাহরণে কার্টেসিয়ান পণ্য তৈরির জন্য দুটি সিকোয়েন্সে দুটি নেস্টেড লুপ চালানোর জন্য তালিকা বোঝার কৌশল ব্যবহার করা হয়৷

>>> [[x,y] for x in [1,2,3] for y in ['a','b','c']]
[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'a'], [2, 'b'], [2, 'c'], [3, 'a'], [3, 'b'], [3, 'c']]

পণ্য() ফাংশন অনুরূপ ফলাফল তৈরি করে

>>> from itertools import product
>>> list(product([1,2,3],['a','b','c']))
[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]

ক্রমক্রম() − এই ফাংশনটি পুনরাবৃত্ত ইনপুট উপাদানগুলির সমস্ত সম্ভাব্য স্থানান্তর প্রদান করে। প্রতিটি স্থানান্তরের দৈর্ঘ্য এই ফাংশনের দ্বিতীয় পরামিতি হিসাবে নির্দিষ্ট করা যেতে পারে। নির্দিষ্ট না থাকলে, দৈর্ঘ্য এক।

>>> list(permutations(range(1,4),2))
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

সংমিশ্রণ() − এই ফাংশনটি ইনপুট পুনরাবৃত্তিযোগ্য উপাদানগুলির সমস্ত সম্ভাব্য সংমিশ্রণ প্রদান করে। প্রতিটি স্থানান্তরের দৈর্ঘ্য এই ফাংশনের দ্বিতীয় পরামিতি হিসাবে নির্দিষ্ট করা যেতে পারে। নির্দিষ্ট না থাকলে, দৈর্ঘ্য এক।

>>> from itertools import combinations
>>> list(combinations(range(1,4),2))
[(1, 2), (1, 3), (2, 3)]

এই নিবন্ধটি পাইথন লাইব্রেরির itertools মডিউলে সংজ্ঞায়িত বিভিন্ন ইটারেটর টুলের সাথে পরিচয় করিয়ে দেয়।


  1. পাইথন ল্যাম্বডা ফাংশন:একটি ভূমিকা

  2. পাইথনে বেনামী ফাংশন

  3. পাইথনে issubset() ফাংশন

  4. ইন্টারসেকশন() ফাংশন পাইথন