Python for AI/Data Structures আরও গভীরে/Lesson 11
Tuples ও Sets
যে data বদলানো যাবে না (tuple) আর যেখানে duplicate থাকবে না (set) — কখন কোনটা, আর কেন ML code-এ এরা সবখানে।
- সময়
- 20 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 4 প্রশ্ন
সহজ ভাষায়
আমরা list চিনি — ক্রমানুসারে সাজানো, বদলানো যায়। আজ আরও দুটো collection:
| Type | লেখা | ক্রম আছে? | বদলানো যায়? | Duplicate? |
|---|---|---|---|---|
list | [1, 2, 2] | হ্যাঁ | হ্যাঁ | চলে |
tuple | (1, 2, 2) | হ্যাঁ | না | চলে |
set | {1, 2} | না | হ্যাঁ | চলে না |
- Tuple — একবার বানালে আর বদলায় না। যেমন একটা point-এর
(x, y)বা একটা ছবির(height, width)। - Set — শুধু unique item রাখে। যেমন একটা dataset-এ কী কী আলাদা label আছে।
কেন দরকার?
এগুলো ML code-এ সবখানে দেখবে, অনেক সময় খেয়ালও করবে না:
- NumPy/PyTorch-এ
array.shapeএকটা tuple:(60000, 28, 28)— ৬০,০০০টা ছবি, প্রতিটা 28×28। - Function থেকে একাধিক মান return করলে সেটা আসলে একটা tuple:
X_train, X_test = split(data)। - Vocabulary বানাতে (text-এ কী কী আলাদা শব্দ আছে) set ব্যবহার হয়।
Tuple
Indexing আর slicing list-এর মতোই। পার্থক্য একটাই — বদলানো যায় না:
Unpacking
Tuple-এর সবচেয়ে কাজের feature — একসাথে কয়েকটা variable-এ ভাগ করে দেওয়া:
return min(numbers), max(numbers) আসলে একটা tuple return করে — আর আমরা সেটা unpack করছি।
একটা item-এর tuple:
(5)আসলে শুধু সংখ্যা 5 — tuple না! এক item-এর tuple লিখতে comma লাগে:(5,)।
Set
খেয়াল করো: "cat" আবার add করলেও কিছু হয়নি — set-এ duplicate থাকে না। আর print-এ ক্রম যেকোনো রকম হতে পারে, কারণ set-এর কোনো নির্দিষ্ট ক্রম নেই।
Set operations
গণিতের set-এর মতোই:
| Operator | নাম | মানে |
|---|---|---|
a & b | intersection | দুটোতেই আছে |
a | b | union | যেকোনো একটায় আছে |
a - b | difference | a-তে আছে, b-তে নেই |
Visual intuition: কেন set-এ খোঁজা এত দ্রুত?
List-এ x in my_list করলে Python শুরু থেকে একে একে প্রতিটা item দেখে। ১০ লাখ item থাকলে ১০ লাখ বার তুলনা।
Set প্রতিটা item-এর একটা hash হিসাব করে রাখে — যেন প্রতিটা item-এর একটা নির্দিষ্ট তাক নম্বর আছে। খোঁজার সময় সরাসরি সেই তাকে যায়।
list: [ ... ১০ লাখ item ... ] -> একে একে খোঁজো O(n)
set: hash("dog") -> তাক #8812 -> সরাসরি দেখো O(1) গড়ে
এজন্য set-এর item হতে হয় immutable (hashable) — string, number, tuple চলে; list চলে না।
Exercise
Exercise
Unique labels
একটা classification dataset-এর label list দেওয়া আছে। unique_labels variable-এ সব আলাদা label রাখো, sorted list হিসেবে। আর num_classes-এ রাখো কতগুলো আলাদা class আছে।
Quiz
Challenge
Challenge
দুই candidate-এর skill তুলনা
দুজন candidate-এর skill দুটো set-এ দেওয়া আছে। তিনটা variable বানাও:
both— দুজনেরই আছে এমন skillonly_rafi— শুধু Rafi-র আছেall_skills— দুজন মিলিয়ে সব skill
তিনটাই set হবে। Loop ছাড়া set operation ব্যবহার করো।
বাস্তবে কোথায় ব্যবহার হয়?
Data leakage চেক — ML-এ train আর test data-তে একই sample থাকলে model-এর accuracy মিথ্যা রকম ভালো দেখায়। Set দিয়ে এক লাইনে ধরা যায়:
আর NLP-তে vocabulary:
Interview প্রশ্ন
- Beginner: List আর tuple-এর পার্থক্য কী? কখন tuple ব্যবহার করবে?
- Intermediate: Dictionary-র key হিসেবে tuple ব্যবহার করা যায়, list কেন যায় না?
- Advanced: Set-এ
inচেক গড়ে O(1) — কিন্তু worst case-এ কেন O(n) হতে পারে? (Hash collision।)
এরপর কী?
List থেকে নতুন list বানাতে এখন পর্যন্ত আমরা loop আর append লিখেছি। Python-এ এটা এক লাইনে করার একটা সুন্দর উপায় আছে — পরের lesson: List Comprehension।