পাইথন কিউ একটি বিল্ট-ইন লাইব্রেরি যা আপনাকে একটি লিস্ট তৈরি করতে দেয় যা FIFO রুল, ফার্স্ট ইন ফার্স্ট আউট ব্যবহার করে। পাইথন ডিকিউ বিপরীত রুল ব্যবহার করে, LIFO কিউ, বা লাস্ট ইন ফার্স্ট আউট। দুটোই স্ট্যাক এবং কিউর ওপর অপারেট করে।
পাইথনে কাজ করার সময়, আপনি একটি লিস্টের বদলে আইটেমের একটি কিউ তৈরি করতে চাইতে পারেন। উদাহরণস্বরূপ, ধরুন আপনি একটি প্রোগ্রাম লিখছেন যা একটি কনফারেন্সে রেজিস্ট্রেশন ট্র্যাক করে। যখন আমরা কাউকে লিস্টে অ্যাড করি, আপনি সেটিকে কিউর পেছনে রাখতে চান, এবং তারপর আপনি চান সে কিউর মাধ্যমে এগিয়ে যাবে যেমন লোকজন সামনে থেকে ইন করতে শুরু করে।
পাইথনে একটি বিল্ট-ইন লাইব্রেরি আছে এই টাইপের সমস্যা হেল্প করার জন্য: কিউস। কিউস পাইথনে স্ট্যাকসের সাথে সিমিলার, মূল পার্থক্য হল কিউতে, আপনি কম রিসেন্টলি অ্যাড করা আইটেমটি রিমুভ করেন। একটি স্ট্যাকে, অন্যদিকে, আপনি মোস্ট রিসেন্টলি অ্যাড করা আইটেমটি রিমুভ করেন।
এই টিউটোরিয়ালে, আমরা পাইথনে কিউর বেসিকস এবং আপনি কীভাবে একটি ইমপ্লিমেন্ট করতে পারেন সেটি ভাঙে ফেলব।
কিউ প্রাইমার
পাইথন লিস্টের সাথে কাজ করার সময় কিউস হেল্পফুল যখন আপনি একটি লিস্ট থেকে জিনিসগুলো সে অর্ডারে বের করতে চান যেটি আপনি সেগুলো রাখেছেন। আমাদের আগের উদাহরণ ব্যবহার করলে, যখন আপনি একটি কনফারেন্সে আছেন, আপনাকে প্রথম রেজিস্টার করলে লাইনের পেছনে রাখা উচিত। কিন্তু যেমত লিস্টের লোকজন ইন করতে শুরু করে, তেমত আপনি লিস্টে আরও এগিয়ে যাবেন।
কিউস অ্যারে এবং লিস্ট থেকে ভিন্ন সেটি যেহেতু কিউস র্যান্ডম অ্যাক্সেস নয়—একটি কিউতে স্টোর করা ডেটার একটি নির্দিষ্ট অর্ডার থাকে। তাই যদি আপনি একটি আইটেম একটি কিউতে অ্যাড করতে চান, সেটি শেষে অ্যাড হবে। এটিকে first-in, first-out, বা সংক্ষেপে FIFO কিউ বলা হয়।
পাইথনে, আপনি একটি স্ট্যান্ডার্ড লিস্ট কিউ হিসেবে ব্যবহার করতে পারেন। যাইহোক, লিস্টগুলো যথেষ্ট স্লো হতে পারে যদি আপনি এলিমেন্ট ইনসার্ট এবং রিমুভ করেন কারণ লিস্টের শুরুতে এলিমেন্ট চেঞ্জ করলে লিস্টের সব অন্যান্য এলিমেন্ট নিচে সরাতে হয়। তাই, যদি আপনাকে একটি ফার্স্ট-ইন, লাস্ট-আউট লিস্ট ইমপ্লিমেন্ট করতে হয়, আপনার কিউ ব্যবহার করা উচিত।
পাইথন কিউ
তাহলে, পাইথনে একটি কিউ কীভাবে ইমপ্লিমেন্ট করবেন? এটি করার জন্য, আমাদের বিল্ট-ইন কিউ লাইব্রেরি ব্যবহার করতে হবে। কিউ মডিউলে কিউর জন্য কিছু উপযোগী ক্লাস থাকে, কিন্তু এই টিউটোরিয়ালে আমরা queue.Queue ক্লাসে ফোকাস করব।
ধরুন আমরা একটি প্রোগ্রাম বিল্ড করছি যা লোকাল থিয়েটারে লেটেস্ট মুভি দেখতে চাওয়া লোকদের ট্র্যাক করে। আমরা মুভি দেখতে চাওয়া লোকদের ওয়েইটলিস্ট ট্র্যাক করতে একটি কিউ ব্যবহার করতে পারি।
প্রথমে, আমাদের আমাদের কিউ ক্লাস ডিফাইন করতে হবে। আমরা নিচের কোড ব্যবহার করে এটি করতে পারি:
from queue import Queue waitlist = Queue()
এখন আমরা আমাদের কিউ তৈরি করার জন্য রেডি। put() ফাংশন ডেটা কিউতে put করার অনুমতি দেয়। নিচের কোডে, আমরা পাঁচজন লোক ওয়েইটলিস্টে অ্যাড করব যারা মুভি দেখতে সাইন আপ করলো:
waitlist.put('Erin')
waitlist.put('Samantha')
waitlist.put('Joe')
waitlist.put('Martin')
waitlist.put('Helena')
এখন আমরা আমাদের কিউতে আমাদের পাঁচটি নাম অ্যাড করেছি। Erin আমাদের কিউতে প্রথম, তারপর Samantha, এবং এভাবে Helena পর্যন্ত যাব, যিনি লাস্ট। আমরা এটি get() ফাংশন ব্যবহার করে ডেমন্সট্রেট করতে পারি, যেন:
print(waitlist.get())
আমাদের কোড নিচের আউটপুট রিটার্ন করে:
Erin
আপনি দেখতে পাচ্ছেন, Erin আমাদের কিউতে প্রথম। যদি আমরা কিউতে থাকা প্রথম দুটি নাম প্রিন্ট আউট করতে চাই, আমরা get() ফাংশন দুবার ব্যবহার করব:
print(waitlist.get()) print(waitlist.get())
আমাদের কোড নিচের আউটপুট রিটার্ন করে:
Erin Samantha
পাইথন ডিকিউ উদাহরণ
কিন্তু কি হয় যদি আমরা আমাদের কিউর যেকোনো এন্ড থেকে একাধিক আইটেম অ্যাড এবং রিমুভ করতে চাই? সেটিই ডিকিউ ফাংশন কাজে আসে। ডিকিউ ব্যবহার করে, আমরা একটি ডাবল-এন্ডেড কিউ তৈরি করতে পারি যেখানে আমরা কিউর শুরু বা শেষ থেকে এলিমেন্ট অ্যাড এবং রিমুভ করতে পারি। ডিকিউস last-in, first-out, বা সংক্ষেপে LIFO।
আমরা উপরের একই উদাহরণ ব্যবহার করব: একটি মুভির জন্য ওয়েইটলিস্টেড নাম সংরক্ষণ করা। প্রথমে, আমরা আমাদের ডিকিউ ফাংশন ডিক্লেয়ার করব:
from collections import deque waitlist = deque()
এখন আমরা আমাদের ডিকিউ ইনিশিয়ালাইজ করেছি, আমরা আমাদের ওয়েইটলিস্টেড নামের লিস্ট আমাদের ডিকিউতে অ্যাড করতে পারি:
waitlist.append('Erin')
waitlist.append('Samantha')
waitlist.append('Joe')
waitlist.append('Martin')
waitlist.append('Helena')
আপনি দেখতে পাচ্ছেন, আমরা আমাদের কিউতে একটি আইটেম পুট করার জন্য append() ফাংশন ব্যবহার করেছি। আমাদের ওয়েইটলিস্টে স্টোর করা ভ্যালুগুলো দেখতে, আমরা নিচের কোড ব্যবহার করতে পারি:
print(waitlist)
আমাদের কোড নিচের আউটপুট রিটার্ন করে:
deque(['Erin', 'Samantha', 'Joe', 'Martin', 'Helena'])
আপনি দেখতে পাচ্ছেন, আমাদের ডেটা সে অর্ডারে স্টোর করা হয়েছে যেটি আমরা আমাদের ডিকিউতে ইনসার্ট করেছি। কিন্তু কি হয় যদি আমরা আমাদের কিউর থেকে প্রথম আইটেমটি রিমুভ করতে চাই? আমরা popleft() ফাংশন ব্যবহার করে এই লক্ষ্য অর্জন করতে পারি। এখানে একটি উদাহরণ:
waitlist.popleft() print(waitlist)
আমাদের কোড আমাদের লিস্টের প্রথম আইটেম - Erin - রিমুভ করল এবং নিচের আউটপুট রিটার্ন করল:
deque(['Samantha', 'Joe', 'Martin', 'Helena'])
যদি আমরা আমাদের ডিকিউতে সব আইটেম রিমুভ করতে চাই, আমরা clear() ফাংশন ব্যবহার করতে পারি:
deque.clear() print(waitlist)
আমাদের কোডের রেজাল্ট নিচের মত:
deque([])
আপনি দেখতে পাচ্ছেন, আমাদের ডিকিউ খালি, কিন্তু অবজেক্টটি এখনও এক্সিস্ট করে।
উপসংহার
এটাই সেটি! এই আর্টিকেলে, আমরা আলোচনা করেছি কিউ কীভাবে একটি ডেটা স্ট্রাকচার যা আপনাকে একটি ফার্স্ট-ইন, ফার্স্ট-আউট স্টোরেজ আপরোচ অ্যাডাপ্ট করতে দেয় ডেটা সংরক্ষণ করার জন্য। একটি কিউর উদাহরণ ব্যবহার হতে পারে একটি নিউ প্রোডাক্টের জন্য একটি ওয়েইটলিস্ট রাখতে।
আমরা আলোচনা করেছি কীভাবে আপনি ডিকিউ ব্যবহার করে একটি ডাবল-এন্ডেড কিউ তৈরি করতে পারেন যেখানে আপনি আপনার কিউর থেকে এলিমেন্ট অ্যাড এবং রিমুভ করতে পারেন। এখন আপনি আপনার নিজস্ব কিউর এবং ডিকিউস লিখতে শুরু করার জন্য রেডি!
পাইথন বিভিন্ন প্রফেশনাল প্রোগ্রামিং এনভায়রনমেন্টে ব্যবহার হয়। আজই ফ্রি Career Karma অ্যাপ ডাউনলোড করুন পাইথন কীভাবে আপনাকে টেক-এ আপনার ড্রিম ক্যারিয়ারে ব্রেক ইন করতে সাহায্য করতে পারে সেটি জানতে!