Python-এ একটি tuple হলো ক্রমে সাজানো আইটেমের একটি অপরিবর্তনীয় কালেকশন।
বেশিরভাগ কালেকশনের মতোই tuples যেকোনো (বা একাধিক) ডেটা টাইপ ধারণ করতে পারে, এমনকি অন্য tuples-ও।
টিউপল সব সাধারণ সিকোয়েন্স অপারেশন সমর্থন করে, কিন্তু পরিবর্তনযোগ্য সিকোয়েন্স অপারেশন সমর্থন করে না।
for item in <tuple> গঠনটি ব্যবহার করে একটি টিউপলের এলিমেন্টগুলোর উপর ইটারেশন করা যায়।
এলিমেন্টের ইনডেক্স আর মান দুটোই দরকার হলে for index, item in enumerate(<tuple>) ব্যবহার করা যায়।
যেকোনো সিকোয়েন্সের মতোই, tuples-এর ভেতরের এলিমেন্টগুলো ব্র্যাকেট নোটেশন দিয়ে অ্যাক্সেস করা যায়, বাম দিক থেকে 0-based index সংখ্যা বা ডান দিক থেকে -1-based index সংখ্যা ব্যবহার করে।
এছাড়াও স্লাইস নোটেশন (<tuple>[<start>:<stop>:<step>]) ব্যবহার করে টিউপল সম্পূর্ণ বা আংশিক কপি করা যায়।
tuple(<iterable>) ক্লাস কনস্ট্রাক্টর অথবা tuple লিটারাল ডিক্লারেশন, দুই পদ্ধতিতেই টিউপল তৈরি করা যায়।
tuple() কনস্ট্রাক্টর খালি অবস্থায় বা একটি ইটারেবল দিয়ে ব্যবহার করা:>>> no_elements = tuple()
()
# The constructor *requires* an iterable, so single elements must be passed in a list or another tuple.
>>> one_element = tuple([16])
(16,)
স্ট্রিং ইটারেবল, তাই tuple() কনস্ট্রাক্টরে একটি একক str আর্গুমেন্ট হিসেবে দিলে চমকে দেওয়ার মতো ফলাফল আসতে পারে:
# String elements (characters) are iterated through and added to the tuple
>>> multiple_elements_string = tuple("Timbuktu")
('T', 'i', 'm', 'b', 'u', 'k', 't', 'u')
একক ইটারেবলের এলিমেন্টগুলো একে একে যোগ হয়:
>>> multiple_elements_list = tuple(["Parrot", "Bird", 334782])
("Parrot", "Bird", 334782)
>>> multiple_elements_set = tuple({2, 3, 5, 7, 11})
(2,3,5,7,11)
যেহেতু tuple(<iterable>) কনস্ট্রাক্টর আর্গুমেন্ট হিসেবে শুধু ইটারেবল (বা কিছুই না) নেয়, তাই লিটারাল পদ্ধতিতে এক-উপাদানের টিউপল তৈরি করা অনেক সহজ।
>>> no_elements = ()
()
>>> one_element = ("Guava",)
("Guava",)
অন্য tuples-সহ নেস্টেড ডেটা স্ট্রাকচারও tuple এলিমেন্ট হিসেবে যোগ করা যায়:
>>> nested_data_structures = ({"fish": "gold", "monkey": "brown", "parrot" : "grey"}, ("fish", "mammal", "bird"))
({"fish": "gold", "monkey": "brown", "parrot" : "grey"}, ("fish", "mammal", "bird"))
>>> nested_data_structures_1 = (["fish", "gold", "monkey", "brown", "parrot", "grey"], ("fish", "mammal", "bird"))
(["fish", "gold", "monkey", "brown", "parrot", "grey"], ("fish", "mammal", "bird"))
প্লাস + অপারেটর ব্যবহার করে টিউপল কনক্যাটেনেট করা যায়, যা প্রতিটি tuple আনপ্যাক করে একটি নতুন সম্মিলিত tuple তৈরি করে।
>>> new_via_concatenate = ("George", 5) + ("cat", "Tabby")
("George", 5, "cat", "Tabby")
#likewise, using the multiplication operator * is the equivalent of using + n times
>>> first_group = ("cat", "dog", "elephant")
>>> multiplied_group = first_group * 3
('cat', 'dog', 'elephant', 'cat', 'dog', 'elephant', 'cat', 'dog', 'elephant')
বাম দিক থেকে 0-based index সংখ্যা বা ডান দিক থেকে -1-based index সংখ্যা ব্যবহার করে ব্র্যাকেট নোটেশন দিয়ে একটি tuple-এর ভেতরের এলিমেন্টগুলো অ্যাক্সেস করা যায়।
student_info = ("Alyssa", "grade 3", "female", 8 )
#gender is at index 2 or index -2
>>> student_gender = student_info[2]
'female'
>>> student_gender = student_info[-2]
'female'
#name is at index 0 or index -4
>>> student_name = student_info[0]
Alyssa
>>> student_name = student_info[-4]
Alyssa
for item in <tuple> সিনট্যাক্স ব্যবহার করে একটি লুপে tuple-এর ভেতরের এলিমেন্টগুলোর উপর ইটারেশন করা যায়।
ইনডেক্স আর মান দুটোই দরকার হলে for index, item in enumerate(<tuple>) ব্যবহার করা যায়।
>>> student_info = ("Alyssa", "grade 3", "female", 8 )
>>> for item in student_info:
... print(item)
...
Alyssa
grade 3
female
8
>>> for index, item in enumerate(student_info):
... print("Index is: " + str(index) + ", value is: " + str(item) +".")
...
Index is: 0, value is: Alyssa.
Index is: 1, value is: grade 3.
Index is: 2, value is: female.
Index is: 3, value is: 8.
একটি tuple-এ সদস্যতা যাচাই করতে in অপারেটর ব্যবহার করা যায়।
>>> multiple_elements_list = tuple(["Parrot", "Bird", 334782])
("Parrot", "Bird", 334782)
>>> "Parrot" in multiple_elements_list
True
Azara আর Rui একই দলের সাথী, যারা জলদস্যু-বিষয়ক একটি গুপ্তধন-অন্বেষণ প্রতিযোগিতায় অংশ নিচ্ছে। একজনের কাছে মানচিত্রের কোঅর্ডিনেট-সহ গুপ্তধনের একটি তালিকা আছে, আর অন্যজনের কাছে মানচিত্রের কোঅর্ডিনেট-সহ স্থানের নামের একটি তালিকা আছে। তাদের শুরুর স্থানটিতে "আপনি এখানে আছেন" লেখা ফাঁকা মানচিত্রও দেওয়া হয়েছে।
| Azara-র তালিকা | Rui-র তালিকা | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
কিন্তু সবকিছু একটু অগোছালো: Azara-র কোঅর্ডিনেটগুলো Rui-র থেকে আলাদা ফরম্যাটে ও আলাদাভাবে সাজানো বলে মনে হচ্ছে, আর কোন গুপ্তধন কোন স্থানের সাথে যায় তা বের করার জন্য তাদের বারবার এক তালিকা থেকে অন্য তালিকায় তাকাতে হচ্ছে। তারা দুজনেই নতুন নতুন পাইথন-অনুরাগী, তাই তাদের খোঁজের তথ্যগুলো আরও ভালোভাবে গুছিয়ে রাখার জন্য একটি ছোট প্রোগ্রাম (আসলে কয়েকটি ফাংশনের একটি সেট) লিখতে তারা আপনার কাছে সাহায্য চাইতে এসেছে।
get_coordinate() ফাংশনটি লিখুন, যা Azara-র তালিকা থেকে একটি (treasure, coordinate) জোড়া নেয় এবং কেবল বের করা মানচিত্রের কোঅর্ডিনেট রিটার্ন করে।
>>> get_coordinate(('Scrimshawed Whale Tooth', '2A'))
2A
convert_coordinate() ফাংশনটি লিখুন, যা "2A" ফরম্যাটে একটি কোঅর্ডিনেট নেয় এবং ("2", "A") ফরম্যাটে একটি টাপল রিটার্ন করে।
>>> convert_coordinate("2A")
("2", "A")
compare_records() ফাংশনটি লিখুন, যা একটি (treasure, coordinate) জোড়া এবং একটি (location, coordinate, quadrant) রেকর্ড নেয় এবং দুটির কোঅর্ডিনেট তুলনা করে।
কোঅর্ডিনেটগুলো "মিলে গেলে" True রিটার্ন করুন, আর না মিললে False রিটার্ন করুন।
সঠিকভাবে তুলনা করার জন্য প্রয়োজন অনুসারে কোঅর্ডিনেটগুলো আবার ফরম্যাট করুন।
>>> compare_records(('Brass Spyglass', '4B'), ('Seaside Cottages', ('1', 'C'), 'blue'))
False
>>> compare_records(('Model Ship in Large Bottle', '8A'), ('Harbor Managers Office', ('8', 'A'), 'purple'))
True
create_record() ফাংশনটি লিখুন, যা Azara-র তালিকা থেকে একটি (treasure, coordinate) জোড়া এবং Rui-র তালিকা থেকে একটি (location, coordinate, quadrant) রেকর্ড নেয় এবং কোঅর্ডিনেটগুলো মিলে গেলে (treasure, coordinate, location, coordinate, quadrant) রিটার্ন করে।
কোঅর্ডিনেটগুলো না মিললে স্ট্রিং "not a match" রিটার্ন করুন।
সঠিকভাবে তুলনা করার জন্য প্রয়োজন অনুসারে কোঅর্ডিনেটটি আবার ফরম্যাট করুন।
>>> create_record(('Brass Spyglass', '4B'), ('Abandoned Lighthouse', ('4', 'B'), 'Blue'))
('Brass Spyglass', '4B', 'Abandoned Lighthouse', ('4', 'B'), 'Blue')
>>> create_record(('Brass Spyglass', '4B'), ('Seaside Cottages', ('1', 'C'), 'blue'))
"not a match"
Azara আর Rui-র একত্র করা রেকর্ডগুলো এমনভাবে পরিষ্কার করুন যাতে প্রতিটি রেকর্ডে কেবল এক সেট কোঅর্ডিনেট থাকে। একটা রিপোর্ট তৈরি করুন, যাতে তারা মানচিত্রে বসাতে যা যা লাগবে তার একটি তালিকা একসাথে দেখতে পারে।
clean_up() ফাংশনটি লিখুন, যা একটি টাপলের টাপল নেয় (দুটি তালিকার সবকিছু), বাইরের টাপলের মধ্যে লুপ করে প্রতিটি ভেতরের টাপল থেকে অবাঞ্ছিত কোঅর্ডিনেট বাদ দেয় এবং প্রতিটিকে একটি 'রিপোর্ট'-এ যোগ করে।
'রিপোর্ট'টি এমনভাবে ফরম্যাট করে রিটার্ন করুন যাতে প্রতিটি লাইনে একটি করে পরিষ্কার করা রেকর্ড থাকে।
>>> clean_up((('Brass Spyglass', '4B', 'Abandoned Lighthouse', ('4', 'B'), 'Blue'), ('Vintage Pirate Hat', '7E', 'Quiet Inlet (Island of Mystery)', ('7', 'E'), 'Orange'), ('Crystal Crab', '6A', 'Old Schooner', ('6', 'A'), 'Purple')))
"""
('Brass Spyglass', 'Abandoned Lighthouse', ('4', 'B'), 'Blue')\n
('Vintage Pirate Hat', 'Quiet Inlet (Island of Mystery)', ('7', 'E'), 'Orange')\n
('Crystal Crab', 'Old Schooner', ('6', 'A'), 'Purple')\n
"""
Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।