মূল content-এ যাও

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

main.py

Indexing আর slicing list-এর মতোই। পার্থক্য একটাই — বদলানো যায় না:

main.py

Unpacking

Tuple-এর সবচেয়ে কাজের feature — একসাথে কয়েকটা variable-এ ভাগ করে দেওয়া:

main.py

return min(numbers), max(numbers) আসলে একটা tuple return করে — আর আমরা সেটা unpack করছি।

একটা item-এর tuple: (5) আসলে শুধু সংখ্যা 5 — tuple না! এক item-এর tuple লিখতে comma লাগে: (5,)।

main.py

Set

main.py

খেয়াল করো: "cat" আবার add করলেও কিছু হয়নি — set-এ duplicate থাকে না। আর print-এ ক্রম যেকোনো রকম হতে পারে, কারণ set-এর কোনো নির্দিষ্ট ক্রম নেই।

Set operations

গণিতের set-এর মতোই:

main.py
Operatorনামমানে
a & bintersectionদুটোতেই আছে
a | bunionযেকোনো একটায় আছে
a - bdifferencea-তে আছে, 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

+20 XP

একটা classification dataset-এর label list দেওয়া আছে। unique_labels variable-এ সব আলাদা label রাখো, sorted list হিসেবে। আর num_classes-এ রাখো কতগুলো আলাদা class আছে।

solution.py

Quiz

  1. Q1point = (3, 4) হলে point[0] = 10 চালালে কী হবে?
  2. Q2len({1, 2, 2, 3, 3, 3})-এর মান কত?
  3. Q3খালি set বানানোর সঠিক উপায় কোনটা?
  4. Q4একটা বড় collection-এ বারবার x in collection চেক করতে হলে কোনটা সবচেয়ে দ্রুত?
0/4 answered

Challenge

Challenge

দুই candidate-এর skill তুলনা

+50 XP

দুজন candidate-এর skill দুটো set-এ দেওয়া আছে। তিনটা variable বানাও:

  • both — দুজনেরই আছে এমন skill
  • only_rafi — শুধু Rafi-র আছে
  • all_skills — দুজন মিলিয়ে সব skill

তিনটাই set হবে। Loop ছাড়া set operation ব্যবহার করো।

solution.py

বাস্তবে কোথায় ব্যবহার হয়?

Data leakage চেক — ML-এ train আর test data-তে একই sample থাকলে model-এর accuracy মিথ্যা রকম ভালো দেখায়। Set দিয়ে এক লাইনে ধরা যায়:

main.py

আর NLP-তে vocabulary:

main.py

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।