পাইথনে সারিগুলির জন্য গাইড

পাইথনে সারিগুলির জন্য গাইড

ভূমিকা

সাধারণ পূর্ণসংখ্যা সংরক্ষণ করা থেকে শুরু করে জটিল কার্যপ্রবাহ পরিচালনা করা পর্যন্ত, ডেটা স্ট্রাকচারগুলি শক্তিশালী অ্যাপ্লিকেশনের ভিত্তি তৈরি করে। তাদের মধ্যে, দ বেণী প্রায়শই কৌতুহলজনক এবং সর্বব্যাপী উভয় হিসাবে আবির্ভূত হয়। এটি সম্পর্কে চিন্তা করুন - ক ব্যাংকে লাইন, একটি ফাস্ট-ফুড কাউন্টারে আপনার পালার জন্য অপেক্ষা করা, বা একটি কম্পিউটার সিস্টেমে বাফারিং কাজ - এই সমস্ত পরিস্থিতি একটি সারির যান্ত্রিকতার সাথে অনুরণিত হয়।

লাইনে থাকা প্রথম ব্যক্তিকে প্রথমে পরিবেশন করা হয় এবং নতুন আগতরা শেষে যোগদান করে। এটি একটি বাস্তব জীবনের একটি কর্মের একটি সারির উদাহরণ!

গাইড-টু-কিউ-ইন-পাইথন-01.png

ডেভেলপারদের জন্য, বিশেষ করে পাইথনে, সারিগুলি কেবল কম্পিউটার বিজ্ঞান পাঠ্যপুস্তকের তাত্ত্বিক গঠন নয়। তারা অনেক অ্যাপ্লিকেশনে অন্তর্নিহিত আর্কিটেকচার গঠন করে। একটি প্রিন্টারে কাজগুলি পরিচালনা করা থেকে শুরু করে লাইভ সম্প্রচারে নির্বিঘ্নে ডেটা স্ট্রিম নিশ্চিত করা পর্যন্ত, সারিগুলি একটি অপরিহার্য ভূমিকা পালন করে৷

এই নির্দেশিকায়, আমরা সারিগুলির ধারণার গভীরে অনুসন্ধান করব, তাদের বৈশিষ্ট্যগুলি অন্বেষণ করব, বাস্তব-বিশ্বের অ্যাপ্লিকেশনগুলি এবং সবচেয়ে গুরুত্বপূর্ণভাবে, কীভাবে কার্যকরভাবে প্রয়োগ করা যায় এবং পাইথনে ব্যবহার করা যায়৷

একটি সারি ডেটা স্ট্রাকচার কি?

ডেটা স্ট্রাকচারের ল্যান্ডস্কেপ দিয়ে নেভিগেট করার সময়, আমরা প্রায়ই এমন কন্টেইনারগুলির সম্মুখীন হই যেগুলির ডেটা এন্ট্রি এবং পুনরুদ্ধারের জন্য আলাদা নিয়ম রয়েছে। এর মধ্যে, দ বেণী এর কমনীয়তা এবং সরলতার জন্য দাঁড়িয়েছে।

ফিফো নীতি

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

বিঃদ্রঃ: একটি সারির দুটি প্রান্ত রয়েছে - পিছনে এবং সামনে. সামনের দিকটি নির্দেশ করে যে উপাদানগুলি কোথা থেকে সরানো হবে এবং পিছনেরটি নির্দেশ করে যেখানে নতুন উপাদান যুক্ত করা হবে৷

বেসিক কিউ অপারেশন

  • সারিবদ্ধ - আইন যোগ শেষ পর্যন্ত একটি উপাদান (পিছন) সারির।

    গাইড-টু-কিউ-ইন-পাইথন-02.png

  • ডেকিউ - আইন সরানোর থেকে একটি উপাদান সদর সারির

    গাইড-টু-কিউ-ইন-পাইথন-03.png

  • উঁকি বা সামনে - অনেক পরিস্থিতিতে, এটি অপসারণ না করে শুধুমাত্র সামনের উপাদানটি পর্যবেক্ষণ করা উপকারী। এই অপারেশন আমাদের ঠিক যে করতে পারবেন.

  • খালি - একটি অপারেশন যা সারিতে কোনো উপাদান আছে কিনা তা নির্ধারণ করতে সাহায্য করে। এটি এমন পরিস্থিতিতে অত্যন্ত গুরুত্বপূর্ণ হতে পারে যেখানে ডেটা থাকা সারিতে কর্মগুলি নির্ভরশীল।

বিঃদ্রঃ: যদিও কিছু সারিগুলির একটি সীমিত আকার থাকে (বাউন্ডেড সারি), অন্যরা সম্ভাব্যভাবে বৃদ্ধি পেতে পারে যতক্ষণ না সিস্টেম মেমরি অনুমতি দেয় (অবাউন্ডেড সারি)।

সারিগুলির সরলতা এবং তাদের ক্রিয়াকলাপের স্পষ্ট নিয়মগুলি সফ্টওয়্যার বিকাশের বিভিন্ন অ্যাপ্লিকেশনের জন্য তাদের আদর্শ করে তোলে, বিশেষ করে এমন পরিস্থিতিতে যাতে সুশৃঙ্খল এবং পদ্ধতিগত প্রক্রিয়াকরণের দাবি করা হয়।

যাইহোক, তত্ত্ব বোঝা মাত্র প্রথম ধাপ। আমরা এগিয়ে যাওয়ার সাথে সাথে পাইথনে সারিগুলি কীভাবে প্রয়োগ করা যায় তা চিত্রিত করে আমরা ব্যবহারিক দিকগুলি অনুসন্ধান করব।

পাইথনে সারিগুলি কীভাবে প্রয়োগ করবেন - তালিকা বনাম ডেক বনাম সারি মডিউল

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

বিঃদ্রঃ: অপারেশন করার আগে সর্বদা আপনার সারির স্থিতি পরীক্ষা করুন। উদাহরণস্বরূপ, ডিকিউ করার আগে, ত্রুটি এড়াতে সারি খালি কিনা তা যাচাই করুন। একইভাবে, আবদ্ধ সারিগুলির জন্য, সারিবদ্ধ করার আগে নিশ্চিত করুন যে সেখানে জায়গা আছে।

সারি বাস্তবায়ন করতে পাইথন তালিকা ব্যবহার করা

সারি বাস্তবায়ন করতে পাইথনের অন্তর্নির্মিত তালিকা ব্যবহার করা স্বজ্ঞাত এবং সহজবোধ্য। বাহ্যিক লাইব্রেরি বা জটিল ডেটা স্ট্রাকচারের প্রয়োজন নেই। যাইহোক, এই পদ্ধতিটি বড় ডেটাসেটের জন্য কার্যকর নাও হতে পারে। একটি তালিকার শুরু থেকে একটি উপাদান অপসারণ (pop(0)) রৈখিক সময় লাগে, যা কর্মক্ষমতা সমস্যা সৃষ্টি করতে পারে।

বিঃদ্রঃ: উচ্চ কর্মক্ষমতা দাবি করা অ্যাপ্লিকেশনগুলির জন্য বা যারা উল্লেখযোগ্য পরিমাণে ডেটা নিয়ে কাজ করে, এতে স্যুইচ করুন৷ collections.deque সারিবদ্ধ এবং সারিবদ্ধ উভয়ের জন্য ধ্রুবক সময়ের জটিলতার জন্য।

আমাদের সারির প্রতিনিধিত্ব করার জন্য একটি তালিকা তৈরি করে শুরু করা যাক:

queue = []

সারির শেষে উপাদান যোগ করার প্রক্রিয়া (সারিবদ্ধকরণ) তালিকায় তাদের যুক্ত করা ছাড়া আর কিছুই নয়:


queue.append('A')
queue.append('B')
queue.append('C')
print(queue) 

এছাড়াও, সারির সামনে থেকে উপাদানটি সরানো (dequeuing) তালিকার প্রথম উপাদানটি সরানোর সমতুল্য:


queue.pop(0)
print(queue) 

ব্যবহার collections.deque সারি বাস্তবায়ন করতে

এই পদ্ধতির হিসাবে অত্যন্ত দক্ষ deque একটি ব্যবহার করে বাস্তবায়িত হয় দ্বিগুণ-সংযুক্ত তালিকা. এটি উভয় প্রান্ত থেকে দ্রুত O(1) যুক্ত এবং পপ সমর্থন করে। এই পদ্ধতির খারাপ দিক হল যে এটি সামান্য নতুনদের জন্য কম স্বজ্ঞাত।

প্রথমত, আমরা আমদানি করব deque থেকে বস্তু collections মডিউল করুন এবং আমাদের সারি শুরু করুন:

from collections import deque queue = deque()

এখন, আমরা ব্যবহার করতে পারেন append() উপাদান সারিবদ্ধ করার পদ্ধতি এবং popleft() সারি থেকে উপাদানগুলি সারিবদ্ধ করার পদ্ধতি:

সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!


queue.append('A')
queue.append('B')
queue.append('C')
print(queue) queue.popleft()
print(queue) 

পাইথন ব্যবহার করে বেণী সারি বাস্তবায়নের মডিউল

সার্জারির queue পাইথনের স্ট্যান্ডার্ড লাইব্রেরির মডিউলটি সারি ব্যবস্থাপনার জন্য আরও বিশেষ পদ্ধতি প্রদান করে, বিভিন্ন ব্যবহারের ক্ষেত্রে ক্যাটারিং করে:

  • সরল সারি - একটি মৌলিক ফিফো সারি
  • LifoQueue - একটি LIFO সারি, মূলত একটি স্ট্যাক
  • অগ্রাধিকারের কিউ - উপাদানগুলি তাদের নির্ধারিত অগ্রাধিকারের ভিত্তিতে সারিবদ্ধ করা হয়

বিঃদ্রঃ: জন্য নির্বাচন করুন queue মডিউল, যা হতে ডিজাইন করা হয়েছে থ্রেড নিরাপদ. এটি নিশ্চিত করে যে সারিতে সমসাময়িক ক্রিয়াকলাপগুলি অপ্রত্যাশিত ফলাফলের দিকে নিয়ে যায় না।

এই পদ্ধতিটি দুর্দান্ত কারণ এটি স্পষ্টভাবে সারি অপারেশনের জন্য ডিজাইন করা হয়েছে। কিন্তু, সম্পূর্ণরূপে সৎ হতে, এটি সাধারণ পরিস্থিতিতে একটি overkill হতে পারে.

এখন, এর ব্যবহার শুরু করা যাক queue আমাদের প্রকল্পে এটি আমদানি করে মডিউল:

import queue

যেহেতু আমরা একটি সাধারণ FIFO সারি বাস্তবায়ন করছি, আমরা এটি ব্যবহার করে শুরু করব SimpleQueue() নির্মাণকারী:

q = queue.SimpleQueue()

Enqueue এবং dequeue অপারেশন ব্যবহার করে বাস্তবায়িত হয় put() এবং get() থেকে পদ্ধতি queue মডিউল:


q.put('A')
q.put('B')
q.put('C')
print(q.queue) q.get()
print(q.queue) 

বিঃদ্রঃ: সারির ক্রিয়াকলাপগুলি ব্যতিক্রমগুলি বাড়াতে পারে যেগুলি যদি পরিচালনা না করা হয় তবে আপনার অ্যাপ্লিকেশনের প্রবাহকে ব্যাহত করতে পারে। এটি প্রতিরোধ করতে, আপনার সারি ক্রিয়াকলাপগুলিকে গুটিয়ে রাখুন৷ try-except ব্লক।

উদাহরণস্বরূপ, হ্যান্ডেল queue.Empty এর সাথে কাজ করার সময় ব্যতিক্রম queue মডিউল:

import queue q = queue.SimpleQueue() try: item = q.get_nowait()
except queue.Empty: print("Queue is empty!")

কোন বাস্তবায়ন নির্বাচন করতে?

পাইথনে সারি বাস্তবায়নের আপনার পছন্দ আপনার অ্যাপ্লিকেশনের প্রয়োজনীয়তার সাথে সারিবদ্ধ হওয়া উচিত। আপনি যদি প্রচুর পরিমাণে ডেটা পরিচালনা করেন বা অপ্টিমাইজড পারফরম্যান্সের প্রয়োজন হয়, collections.deque একটি বাধ্যতামূলক পছন্দ। যাইহোক, বহু-থ্রেডেড অ্যাপ্লিকেশনের জন্য বা যখন অগ্রাধিকারগুলি কার্যকর হয়, queue মডিউল দৃঢ় সমাধান প্রস্তাব. দ্রুত স্ক্রিপ্টের জন্য বা আপনি যখন সবে শুরু করছেন, পাইথন তালিকাগুলি যথেষ্ট হতে পারে, তবে সর্বদা সম্ভাব্য পারফরম্যান্স ত্রুটি সম্পর্কে সতর্ক থাকুন।

বিঃদ্রঃ: পাইথন ইতিমধ্যে শক্তিশালী অন্তর্নির্মিত সমাধান প্রদান করে যখন কাস্টম-বাস্তবায়ন সারি অপারেশন দ্বারা চাকা পুনরায় উদ্ভাবন।
কাস্টম সমাধান তৈরি করার আগে, পাইথনের অন্তর্নির্মিত অফারগুলির সাথে নিজেকে পরিচিত করুন deque এবং queue মডিউল প্রায়শই না, তারা বিস্তৃত প্রয়োজনীয়তা পূরণ করে, সময় বাঁচায় এবং সম্ভাব্য ত্রুটিগুলি হ্রাস করে।

ডাইভ ডিপার: পাইথনে অ্যাডভান্সড কিউ কনসেপ্ট

যারা সারিগুলির মৌলিক মেকানিক্স উপলব্ধি করেছেন এবং আরও গভীরে যেতে আগ্রহী, পাইথন সারি-ভিত্তিক ক্রিয়াকলাপগুলিকে পরিমার্জিত এবং অপ্টিমাইজ করার জন্য উন্নত ধারণা এবং কৌশলগুলির আধিক্য সরবরাহ করে। আসুন এই অত্যাধুনিক দিকগুলির কিছু উন্মোচন করি, আপনাকে আরও জটিল পরিস্থিতি মোকাবেলা করার জন্য সরঞ্জামের একটি অস্ত্রাগার দেয়।

এর সাথে ডবল-এন্ডেড সারি কি সম্বন্ধে

আমরা পূর্বে অন্বেষণ করেছি deque FIFO কিউ হিসাবে, এটি LIFO (লাস্ট-ইন-ফার্স্ট-আউট) অপারেশনগুলিকেও সমর্থন করে। এটি আপনাকে O(1) জটিলতার সাথে উভয় প্রান্ত থেকে উপাদান যুক্ত বা পপ করার অনুমতি দেয়:

from collections import deque dq = deque()
dq.appendleft('A') dq.append('B') dq.pop() dq.popleft() 

অগ্রাধিকার কিউ কর্মে

প্রক্রিয়াকরণের ক্রম অগ্রাধিকারের উপর নির্ভরশীল হলে একটি সাধারণ FIFO সারি ব্যবহার করা অদক্ষতা বা অবাঞ্ছিত ফলাফলের দিকে নিয়ে যেতে পারে, তাই, যদি আপনার আবেদনের প্রয়োজন হয় যে কিছু উপাদান কিছু মানদণ্ডের ভিত্তিতে অন্যদের আগে প্রক্রিয়া করা হবে, তাহলে একটি নিয়োগ করুন PriorityQueue. এটি নিশ্চিত করে যে উপাদানগুলি তাদের সেট অগ্রাধিকারের ভিত্তিতে প্রক্রিয়া করা হয়েছে।

আমরা সারিতে যে উপাদানগুলি যোগ করছি তার জন্য আমরা কীভাবে অগ্রাধিকার নির্ধারণ করি তা একবার দেখুন। এই আমরা একটি যুক্তি হিসাবে একটি tuple পাস যে প্রয়োজন put() পদ্ধতি tuple এর প্রথম উপাদান হিসাবে অগ্রাধিকার এবং দ্বিতীয় উপাদান হিসাবে প্রকৃত মান থাকা উচিত:

import queue pq = queue.PriorityQueue()
pq.put((2, "Task B"))
pq.put((1, "Task A")) pq.put((3, "Task C")) while not pq.empty(): _, task = pq.get() print(f"Processing: {task}")

এটি আমাদের নিম্নলিখিত দেবে:

Processing: Task A
Processing: Task B
Processing: Task C

নোট করুন কিভাবে আমরা সারিতে সংরক্ষিত জিনিসের চেয়ে ভিন্ন ক্রমে উপাদান যোগ করেছি। যে কারণে আমরা বরাদ্দ করেছি অগ্রাধিকার put() অগ্রাধিকার সারিতে উপাদান যোগ করার সময় পদ্ধতি।

একটি সার্কুলার সারি বাস্তবায়ন

একটি বৃত্তাকার সারি (বা রিং বাফার) একটি উন্নত ডেটা কাঠামো যেখানে শেষ উপাদানটি প্রথমটির সাথে সংযুক্ত থাকে, একটি বৃত্তাকার প্রবাহ নিশ্চিত করে। deque ব্যবহার করে এই আচরণ অনুকরণ করতে পারেন maxlen সম্পত্তি:

from collections import deque circular_queue = deque(maxlen=3)
circular_queue.append(1)
circular_queue.append(2)
circular_queue.append(3) circular_queue.append(4)
print(circular_queue) 

উপসংহার

সারিগুলি, মৌলিক কিন্তু শক্তিশালী, বিভিন্ন বাস্তব-বিশ্বের অ্যাপ্লিকেশন এবং গণনাগত সমস্যাগুলির মধ্যে তাদের সারমর্ম খুঁজে পায়। অপারেটিং সিস্টেমে টাস্ক শিডিউল করা থেকে শুরু করে প্রিন্ট স্পুলার বা ওয়েব সার্ভারের অনুরোধে ডেটা প্রবাহ পরিচালনা করা পর্যন্ত, সারিগুলির প্রভাব সুদূরপ্রসারী।

পাইথন সারিগুলির সাথে কাজ করার জন্য সরঞ্জাম এবং লাইব্রেরির একটি সমৃদ্ধ প্যালেট টেবিলে নিয়ে আসে। দ্রুত স্ক্রিপ্টের জন্য সহজ তালিকা-ভিত্তিক সারি থেকে অত্যন্ত দক্ষ পর্যন্ত deque পারফরম্যান্স-সমালোচনামূলক অ্যাপ্লিকেশনের জন্য, ভাষাটি সত্যিই প্রয়োজনের বর্ণালী পূরণ করে।

সময় স্ট্যাম্প:

থেকে আরো Stackabuse