কম্পিউটার টিউটোরিয়াল

পাইথনে Array - নামেরিক ভ্যালুর ইফিশিয়েন্ট অ্যারে


অ্যারে C/C++, Java ইত্যাদিতে একটি খুব জনপ্রিয় ডেটা স্ট্রাকচার। এই ল্যাঙ্গুয়েজগুলিতে অ্যারে ডিফাইন করা হয় একই ডেটা টাইপের একাধিক এলিমেন্টের সংগ্রহ হিসেবে। পাইথনে অ্যারের কোনো বিল্ট-ইন সমতুল্য নেই। এর List এবং Tuple এলিমেন্টের সংগ্রহ হলেও সেগুলো ভিন্ন টাইপের হতে পারে।

পাইথনের array মডিউল C-টাইপ অ্যারে অনুকরণ করে। মডিউলটি 'array' ক্লাস ডিফাইন করে। নিচের কনস্ট্রাক্টর একটি অ্যারে অবজেক্ট তৈরি করে:

array(typecode, initializer)

typecode আর্গুমেন্ট অ্যারের টাইপ নির্ধারণ করে। Initializer হওয়া উচিত একটি সিকোয়েন্স যার সব এলিমেন্ট ম्याचিং টাইপের।

নিচের স্টেটমেন্ট একটি ইন্টিজার অ্যারে অবজেক্ট তৈরি করে:

>>> import array
>>> arr = array.array('i', range(5))
>>> arr
array('i', [0, 1, 2, 3, 4])
>>> type(arr)

>>> array.typecodes
'bBuhHiIlLqQfd'

array মডিউল typecodes অ্যাট্রিবিউট ডিফাইন করে যা একটি স্ট্রিং রিটার্ন করে। স্ট্রিংয়ের প্রতিটি ক্যারেক্টার একটি টাইপ কোড রিপ্রেজেন্ট করে যা C টাইপ এবং সমতুল্য পাইথন টাইপ নির্দেশ করে:

Type code C Type Python Type
'b' signed char int
'B' unsigned char int
'u' Py_UNICODE Unicode character
'h' signed short int
'H' unsigned short int
'i' signed int int
'I' unsigned int int
'l' signed long int
'L' unsigned long int
'q' signed long long int
'Q' unsigned long long int
'f' float float
'd' double float

initializer আর্গুমেন্ট একটি বাইট-লাইক অবজেক্ট হতে পারে। নিচের উদাহরণ স্ট্রিং-এর বাইট রিপ্রেজেন্টেশন থেকে একটি অ্যারে বিল্ড করে।

>>> arr1 = array.array('b', b'Hello')
>>> arr1
array('b', [72, 101, 108, 108, 111])

array ক্লাস নিচের মেথডগুলো ডিফাইন করে:

array.buffer_info()

এই মেথড একটি টাপল (address, length) রিটার্ন করে যা বর্তমান মেমরি অ্যাড্রেস এবং বাফারের দৈর্ঘ্য এলিমেন্টের সংখ্যায় দেয় যা অ্যারের কন্টেন্ট ধারণ করতে ব্যবহৃত হয়।

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr.buffer_info()
(2201141755144, 5)

count()

এই মেথড অ্যারেতে নির্দিষ্ট এলিমেন্টের ঘটনার সংখ্যা রিটার্ন করে।

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr.count(2)
1

extend()

এই মেথড ইটেরেবল থেকে আইটেম অ্যাপেন্ড করে অ্যারের শেষে, বা ইটেরেবল যাতে একই টাইপ কোড থাকে; না হলে TypeError রেইজ হবে।

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr1 = array.array('i', [10, 20, 30])
>>> arr.extend(arr1)
>>> arr
array('i', [0, 1, 2, 3, 4, 10, 20, 30])

fromfile()

এই মেথড ফাইল অবজেক্ট থেকে n আইটেম (মেশিন ভ্যালু হিসেবে) পড়ে এবং অ্যারেতে অ্যাপেন্ড করে।

নিচের উদাহরণে, আমরা প্রথমে একটি ফাইল বাইনারি রাইট মোডে ওপেন করি।

>>> file = open('test.txt', 'wb')
>>> file.write(b'Hello Python')
12
>>> file.close()

এখন আমরা এই ফাইলটি ব্যবহার করি এর ডেটা অ্যারে অবজেক্টে অ্যাপেন্ড করতে।

>&>>>> a = array.array('i')
>>> file = open('test.txt', 'rb')
>>> a.fromfile(file, file.tell())
>>> a
array('i', [1819043144, 2035294319, 1852794996])

append()

এই মেথড একটি নতুন আইটেম অ্যারের শেষে অ্যাপেন্ড করে।

fromlist()

এই মেথড লিস্ট থেকে আইটেম অ্যাপেন্ড করে অ্যারেতে। এটি সমতুল্য for x in list: a.append(x)।

>>> a = array.array('i')
>>> a.append(10)
>>> a
array('i', [10])
>>> num = [20, 30, 40, 50]
>>> a.fromlist(num)
>>> a
array('i', [10, 20, 30, 40, 50])

insert()

নির্দিষ্ট পজিশনের আগে অ্যারেতে একটি নতুন আইটেম ইনসার্ট করে।

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> a.insert(2, 25)
>>> a
array('i', [10, 20, 25, 30, 40, 50])

pop()

এই মেথড দেওয়া ইনডেক্সের আইটেম রিটার্ন করে সেটি অ্যারেতে থেকে রিমুভ করার পর।

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> x = a.pop(2)
>>> x
30
>>> a
array('i', [10, 20, 40, 50])

remove()

এই মেথড দেওয়া আইটেমের প্রথম ঘটনা অ্যারেতে থেকে রিমুভ করে।

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> a.remove(30)
>>> a
array('i', [10, 20, 40, 50])

tofile()

এই মেথড সব আইটেম ফাইল অবজেক্টে লেখে যেটির রাইট পারমিশন এনাবলড।

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> file = open("test.txt", "wb")
>>> a.tofile(file)
>>> file.close()
>>> file = open("test.txt", "rb")
>>> file.read()
b'\n\x00\x00\x00\x14\x00\x00\x00\x1e\x00\x00\x00(\x00\x00\x002\x00\x00\x00'

  1. পাইথনে অ্যারে পার্টিশন I

  2. পাইথনে অ্যারে রোটেট (Rotate Array)

  3. পাইথনে নামপাই অ্যারে এর ডেটা টাইপ পরিবর্তন

  4. পাইথন न्यুমেরিক টাইপস (Numeric Types)