অ্যারে 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'