টাপল

টাপল #

টাপলও এক ধরনের তালিকা বা লিস্ট। তাহলে আমাদের মনে প্রশ্ন উঠতে পারে যে একই ধরনের দুইটা ডাটা টাইপের থাকার দরকার কি পাইথনে? প্রশ্নটা বুদ্ধিদীপ্ত এবং যৌক্তিক। তবে, পাইথনে টাপল আর লিস্ট হুবহু এক জিনিস না। পার্থক্য হল, লিস্টের মত করে টাপলকে ইচ্ছামত পরিবর্তন, পরিবর্ধন করা যায় না। অন্যদিকে টাপল () চিহ্ন ব্যবহার করে।

পাইথনে টাপল তৈরি করা খুবই সহজ কাজ। আইটেমগুলো কমা দিয়ে সেপারেট করে লিখলাম, এবার সেগুলোকে () এর ভিতর পুরে দিলাম। ব্যাস, হয়ে গেল। একটা উদাহরণ দেখা যাক:

>>> a = ()
>>> a
()
>>> type(a)
<class 'tuple'>
>>> a = ('onion', 'potato', 'ginger', 'cucumber')
>>> a
('onion', 'potato', 'ginger', 'cucumber')
>>> type(a)
<class 'tuple'>

একটু বোঝা যাক বিষয়টা। a = () দিয়ে আমরা একটা টাপল ডিক্লেয়ার করেছি (টাপল টাইপের অবজেক্ট তৈরি করেছি)। তবে এই টাপলটা ফাঁকা, এর ভিতর কোন আইটেম নাই। a = ('onion', 'potato', 'ginger', 'cucumber') দিয়ে আমরা একটা টাপল তৈরি করেছি যেখানে চারটা আইটেম রয়েছে। এখন আইটেম নিয়ে একটু কথা বলা যাক।

টাপলের আইটেমের ডাটা টাইপ যেকোন কিছুই হতে পারে। আমরা এই টাপলে স্ট্রিং ব্যবহার করেছি। তবে ইন্টিজার, ফ্লোট যা খুশি ব্যবহার করতে পারতাম। এমনকি চাইলে লিস্ট, টাপল বা ডিকশনারিও ব্যবহার করতে পারতাম। আসলে টাপলের সব আইটেমগুলো যে একই ডাটা টাইপের হতে হবে এরকম কোন বিধি নিষেধ নেই, মিক্সড ডাটা টাইপের হতেই পারে।

>>> b = ('onion', 'potato', 'ginger', 'cucumber', 1, 3.1416)
>>> b
('onion', 'potato', 'ginger', 'cucumber', 1, 3.1416)
>>> type(b)
<type 'tuple'>

অ্যাক্সেস আইটেম #

এবার আমরা টাপলের আইটেম বা ভ্যালুগুলো অ্যাক্সেস করব। আচ্ছা লিস্ট অ্যাক্সেস করা মনে আছে তো আমাদের? ঐ যে ইনডেক্স নম্বর দিয়ে অ্যাক্সেস করেছিলাম। হুম, টাপলের ক্ষেত্রেও হুবহু একই নিয়ম প্রযোজ্য। টাপলের ইনডেক্সও 0 থেকে শুরু হয়।

>>> b = ('onion', 'potato', 'ginger', 'cucumber', 1, 3.1416)
>>> b[0]
'onion'
>>> b[1]
'potato'
>>> b[1:5]
('potato', 'ginger', 'cucumber', 1)
>>> b[:5]
('onion', 'potato', 'ginger', 'cucumber', 1)
>>> b[2:]
('ginger', 'cucumber', 1, 3.1416)

হুবহু একই জিনিস, তাই না? যাহোক, চলুন আমরা আমাদের আইটেমগুলোর ডাটা টাইপ চেক করে দেখি।

>>> b = ('onion', 'potato', 'ginger', 'cucumber', 1, 3.1416)
>>> type(b[0])
<type 'str'>
>>> type(b[4])
<type 'int'>
>>> type(b[5])
<type 'float'>

মিক্সড ডাটা টাইপের টাপল।

টাপল পরিবর্তন, পরিমার্জন, পরিবর্ধন #

আগেই জেনেছি, লিস্টের মত করে টাপলকে ইচ্ছামত পরিবর্তন, পরিবর্ধন করা যায় না। তারপরও একটু চেষ্টা করা যাক:

>>> b
('onion', 'potato', 'ginger', 'cucumber', 1, 3.1416)
>>> b[0] = 'new'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

হুম, TypeError থ্রো করেছে পাইথন। তারমানে সত্যিই যায় না। তবে আমরা চাইলে পুরাতন টাপলে নতুন আইটেম যোগ করে একটা নতুন টাপল বানাতে পারি।

>>> b
('onion', 'potato', 'ginger', 'cucumber', 1, 3.1416)
>>> b + ('new',)
('onion', 'potato', 'ginger', 'cucumber', 1, 3.1416, 'new')

এখানে আমরা টাপল b এর সাথে নতুন একটা টাপল (’new’,) যোগ করেছি। তারপর দুইটা টাপল যোগ করে নতুন একটা টাপল পেয়েছি। আচ্ছা ’new’ এর পরে , চিহ্নটা না দিলে কি ক্ষতি হত? কেউ কি বলতে পারি আমরা? চেষ্টা করতে হবে!

আমাদের কারো মনে যদি টাপলের কোন আইটেম রিমুভ করার বাসনা থেকে থাকে তবে তা এখনই বাদ দিতে হবে। কারণ, টাপলের আইটেম রিমুভ করা যায় না।

গোণাগুণি, খোঁজাখুঁজি #

একটা টাপলে ঠিক কতগুলো আইটেম রয়েছে তা জানার জন্য আমরা len() ফাংশনটা ব্যবহার করতে পারি।

>>> b
('rice', 'python', 'potato', 343, 'cucumber', 'finger', 23486.4678)
>>> len(b)
7

এখন যদি জিজ্ঞেস করা হয় যে এই ৭টা আইটেমের ভিতরে ‘potato’ আইটেমটা কতবার আছে? উত্তর দেয়ার জন্য আমাদের জানতে হবে count() ফাংশনের ব্যবহার। এই ফাংশনের ভিতর কোন আইটেম দিয়ে দেয়া হলে এটা আমাদেরকে ঐ আইটেমেটা কতবার আছে তা জানিয়ে দেয়। উদাহরণ দিলে বিষয়টা আরো পরিষ্কার হবে:

>>> b
('rice', 'python', 'potato', 343, 'cucumber', 'finger', 23486.4678)
>>> b.count('potato')
1
>>> c = ('potato', 'a', 'b', 'potato', 'potato')
>>> c.count('potato')
3

আশা করি, আমরা সবাই বুঝেছি। তো চেষ্টা চালিয়ে যেতে থাকি। আরো প্রাকটিস করি। কি বলেন?

মন্তব্য করুন