Hot Post

6/recent/ticker-posts

Header Ads Widget

Python শেখার সিরিজ — পর্ব ৭ / ২০ (Lists ও Tuples)

🐍 Python শেখার সিরিজ — পর্ব ৭ / ২০
python learning

Lists ও Tuples
Python-এর সবচেয়ে ব্যবহৃত Data Structure — List তৈরি, Indexing, Slicing, সব Method এবং Tuple-এর সাথে পার্থক্য সহ বাস্তব প্রজেক্ট
⏱ পড়তে সময় ~১৮ মিনিট 🎯 Beginner Friendly 🐍 Python 3.x

এতদিন আমরা এক সময়ে একটি মান নিয়ে কাজ করেছি। কিন্তু বাস্তব জীবনে একসাথে অনেক তথ্য নিয়ে কাজ করতে হয় — যেমন একটি ক্লাসের সব ছাত্রের নাম, একটি দোকানের সব পণ্যের দাম। এই ধরনের সংগ্রহকে সংরক্ষণ করতে Python-এ সবচেয়ে বেশি ব্যবহৃত হয় List

📋 List কী? — বাস্তব উদাহরণে

List হলো Python-এর একটি Data Structure যেখানে একসাথে অনেক মান সংরক্ষণ করা যায়। এটিকে তুমি একটি সুপারশপের ট্রলির মতো ভাবতে পারো — ট্রলিতে যত ইচ্ছা পণ্য রাখা যায়, একটি একটি করে বের করা যায়, নতুন পণ্য যোগ করা যায়, বা পুরনোটা সরানো যায়।

List-এর বৈশিষ্ট্য:

বৈশিষ্ট্যমানেউদাহরণ
Orderedউপাদানগুলো ক্রমানুযায়ী থাকেপ্রথমটি সবসময় প্রথমেই থাকবে
Mutableপরিবর্তনযোগ্যযোগ, বাদ, পরিবর্তন করা যায়
Indexedপ্রতিটি উপাদানের index আছেlist[0], list[1]...
Mixed Typesবিভিন্ন ধরনের ডেটা রাখা যায়সংখ্যা, লেখা, Boolean একসাথে
Duplicateএকই মান একাধিকবার রাখা যায়[1, 2, 2, 3]
🛠️ List তৈরি করা ও Basic Operations

List তৈরি করতে Square Bracket [ ] ব্যবহার করো। উপাদানগুলো কমা দিয়ে আলাদা করো।

Python — List তৈরি
# বিভিন্ন ধরনের List
fruits    = ["আম", "কলা", "লিচু", "আনারস"]
numbers   = [10, 20, 30, 40, 50]
mixed     = ["রাহিম", 25, True, 3.14]  # মিশ্র ধরন
empty     = []                              # খালি List

# Basic information
print(f"ফলের List: {fruits}")
print(f"মোট ফল: {len(fruits)}")          # দৈর্ঘ্য
print(f"ধরন: {type(fruits)}")

# List-এর মধ্যে আছে কিনা যাচাই
print("আম" in fruits)       # True
print("পেয়ারা" in fruits)    # False

# দুটি List জোড়া লাগানো
more_fruits = ["পেয়ারা", "নারিকেল"]
all_fruits  = fruits + more_fruits
print(all_fruits)
✔ আউটপুট
ফলের List: ['আম', 'কলা', 'লিচু', 'আনারস']
মোট ফল: 4
ধরন: <class 'list'>
True
False
['আম', 'কলা', 'লিচু', 'আনারস', 'পেয়ারা', 'নারিকেল']
🎯 Indexing — নির্দিষ্ট উপাদানে পৌঁছানো

List-এর প্রতিটি উপাদানের একটি Index আছে। Python-এ Index শুরু হয় থেকে। Negative Index দিয়ে পেছন থেকে উপাদান নেওয়া যায়।

fruits = ["আম", "কলা", "লিচু", "আনারস", "পেয়ারা"]
→ Positive Index (সামনে থেকে)
"আম"0
"কলা"1
"লিচু"2
"আনারস"3
"পেয়ারা"4
← Negative Index (পেছন থেকে)
-5
-4
-3
-2
-1
Python — Indexing
fruits = ["আম", "কলা", "লিচু", "আনারস", "পেয়ারা"]

# Positive Indexing
print(fruits[0])    # আম (প্রথম)
print(fruits[2])    # লিচু (তৃতীয়)
print(fruits[4])    # পেয়ারা (শেষ)

# Negative Indexing (পেছন থেকে)
print(fruits[-1])   # পেয়ারা (শেষটা)
print(fruits[-2])   # আনারস (শেষের আগেরটা)

# সবচেয়ে সহজে প্রথম ও শেষ
print(f"প্রথম: {fruits[0]}, শেষ: {fruits[-1]}")
✔ আউটপুট
আম
লিচু
পেয়ারা
পেয়ারা
আনারস
প্রথম: আম, শেষ: পেয়ারা
⚠️

List-এর বাইরের Index দিলে IndexError আসবে। যেমন ৫টি উপাদানের List-এ fruits[5] দিলে Error। সর্বোচ্চ Index হবে len(list) - 1

✂️ Slicing — List-এর অংশ নেওয়া

Slicing দিয়ে List-এর একটি নির্দিষ্ট অংশ নেওয়া যায়। Syntax: list[start:stop:step]

nums = [10, 20, 30, 40, 50, 60, 70]
nums[1:4] 10 20 30 40 50 60 70
nums[:3] 10 20 30 40 50 60 70
nums[4:] 10 20 30 40 50 60 70
nums[::2] 10 20 30 40 50 60 70
nums[::-1] 70 60 50 40 30 20 10
Python — Slicing
nums = [10, 20, 30, 40, 50, 60, 70]

print(nums[1:4])    # [20, 30, 40] — index 1 থেকে 3 পর্যন্ত
print(nums[:3])     # [10, 20, 30] — শুরু থেকে index 2 পর্যন্ত
print(nums[4:])     # [50, 60, 70] — index 4 থেকে শেষ পর্যন্ত
print(nums[::2])    # [10, 30, 50, 70] — একটি পর পর
print(nums[::-1])   # [70, 60, 50, 40, 30, 20, 10] — উল্টো

# শেষের ৩টি
print(nums[-3:])    # [50, 60, 70]

# List-এর কপি
copy = nums[:]
print(copy)
✔ আউটপুট
[20, 30, 40]
[10, 20, 30]
[50, 60, 70]
[10, 30, 50, 70]
[70, 60, 50, 40, 30, 20, 10]
[50, 60, 70]
[10, 20, 30, 40, 50, 60, 70]
✏️ List পরিবর্তন করা — Update ও Delete

List Mutable — মানে এর উপাদান পরিবর্তন করা যায়।

Python — Update ও Delete
fruits = ["আম", "কলা", "লিচু", "আনারস"]

# নির্দিষ্ট উপাদান পরিবর্তন
fruits[1] = "পেয়ারা"
print(fruits)   # ['আম', 'পেয়ারা', 'লিচু', 'আনারস']

# Slice দিয়ে একাধিক পরিবর্তন
fruits[1:3] = ["নারিকেল", "পেঁপে"]
print(fruits)   # ['আম', 'নারিকেল', 'পেঁপে', 'আনারস']

# del দিয়ে মুছে ফেলা
del fruits[0]
print(fruits)   # ['নারিকেল', 'পেঁপে', 'আনারস']

# Slice মুছে ফেলা
del fruits[0:2]
print(fruits)   # ['আনারস']
✔ আউটপুট
['আম', 'পেয়ারা', 'লিচু', 'আনারস']
['আম', 'নারিকেল', 'পেঁপে', 'আনারস']
['নারিকেল', 'পেঁপে', 'আনারস']
['আনারস']
🔨 গুরুত্বপূর্ণ List Methods

Python-এর List-এ অনেক Built-in Method আছে। সবচেয়ে বেশি ব্যবহৃত গুলো:

append(x)

শেষে একটি উপাদান যোগ করে

insert(i, x)

i নম্বর index-এ x যোগ করে

extend(list)

অন্য List-এর সব উপাদান যোগ

remove(x)

প্রথম x খুঁজে মুছে দেয়

pop(i)

i নম্বর উপাদান মুছে ফেরত দেয়

sort()

ছোট থেকে বড়ো ক্রমে সাজায়

reverse()

List উল্টো করে দেয়

index(x)

x-এর index বলে দেয়

count(x)

x কতবার আছে গণনা করে

clear()

List সম্পূর্ণ খালি করে

copy()

List-এর একটি কপি তৈরি করে

sorted(list)

নতুন sorted List তৈরি করে

Python — List Methods বিস্তারিত
students = ["রাহিম", "করিম", "সালমা"]

# append — শেষে যোগ
students.append("জামাল")
print(students)   # ['রাহিম', 'করিম', 'সালমা', 'জামাল']

# insert — নির্দিষ্ট জায়গায়
students.insert(1, "নাসরিন")
print(students)   # ['রাহিম', 'নাসরিন', 'করিম', 'সালমা', 'জামাল']

# remove — নির্দিষ্ট মান মুছে
students.remove("করিম")
print(students)   # ['রাহিম', 'নাসরিন', 'সালমা', 'জামাল']

# pop — শেষেরটা বের করে ফেরত দেয়
last = students.pop()
print(f"বের হলো: {last}")  # জামাল
print(students)

# sort ও reverse
marks = [85, 42, 67, 91, 55]
marks.sort()
print(f"ছোট থেকে: {marks}")
marks.sort(reverse=True)
print(f"বড় থেকে: {marks}")

# index ও count
nums = [3, 1, 4, 1, 5, 9, 2, 6]
print(f"4-এর index: {nums.index(4)}")     # 2
print(f"1 কতবার আছে: {nums.count(1)}")   # 2
✔ আউটপুট
['রাহিম', 'করিম', 'সালমা', 'জামাল']
['রাহিম', 'নাসরিন', 'করিম', 'সালমা', 'জামাল']
['রাহিম', 'নাসরিন', 'সালমা', 'জামাল']
বের হলো: জামাল
['রাহিম', 'নাসরিন', 'সালমা']
ছোট থেকে: [42, 55, 67, 85, 91]
বড় থেকে: [91, 85, 67, 55, 42]
4-এর index: 2
1 কতবার আছে: 2
Built-in Functions — List-এর সাথে
Python — Built-in Functions
scores = [78, 92, 55, 88, 67, 95, 45]

print(f"মোট:        {sum(scores)}")
print(f"সর্বনিম্ন:  {min(scores)}")
print(f"সর্বোচ্চ:   {max(scores)}")
print(f"মোট সংখ্যা: {len(scores)}")
print(f"গড়:        {sum(scores)/len(scores):.2f}")
✔ আউটপুট
মোট:        520
সর্বনিম্ন:  45
সর্বোচ্চ:   95
মোট সংখ্যা: 7
গড়:        74.29
🔁 List-এর সাথে Loops

পর্ব ৫-এ Loop শিখেছিলাম। List-এর সাথে Loop ব্যবহার করলে প্রতিটি উপাদানের উপর কাজ করা যায়।

Python — List with Loops
products = [
    {"naam": "চাল",    "dam": 60,  "porimaan": 5},
    {"naam": "ডাল",    "dam": 120, "porimaan": 2},
    {"naam": "তেল",    "dam": 180, "porimaan": 1},
    {"naam": "চিনি",   "dam": 100, "porimaan": 3},
]

print("বাজারের হিসাব:")
print("─" * 35)
total = 0

for item in products:
    subtotal = item["dam"] * item["porimaan"]
    total += subtotal
    print(f"{item['naam']:8} × {item['porimaan']} = {subtotal:6} টাকা")

print("─" * 35)
print(f"{'মোট':16} = {total:6} টাকা")
✔ আউটপুট
বাজারের হিসাব:
───────────────────────────────────
চাল      × 5 =    300 টাকা
ডাল      × 2 =    240 টাকা
তেল      × 1 =    180 টাকা
চিনি     × 3 =    300 টাকা
───────────────────────────────────
মোট             =   1020 টাকা
📦 Nested List — List-এর ভেতরে List

একটি List-এর উপাদান হিসেবে আরেকটি List রাখা যায়। এটি 2D বা Matrix ধরনের ডেটা সংরক্ষণে ব্যবহৃত হয়।

Python — Nested List
# ক্লাসের ছাত্রদের নম্বর (৩ সাবজেক্ট)
results = [
    ["রাহিম",  85, 72, 90],
    ["করিম",   78, 88, 65],
    ["সালমা",  92, 95, 88],
]

# নির্দিষ্ট উপাদানে পৌঁছানো
print(results[0])          # ['রাহিম', 85, 72, 90]
print(results[0][0])       # রাহিম
print(results[2][1])       # 92 (সালমার প্রথম নম্বর)

# সবার গড় বের করা
print("\nরেজাল্ট শিট:")
for row in results:
    naam   = row[0]
    marks  = row[1:]
    avg    = sum(marks) / len(marks)
    print(f"{naam:8} → নম্বর: {marks}, গড়: {avg:.1f}")
✔ আউটপুট
['রাহিম', 85, 72, 90]
রাহিম
92

রেজাল্ট শিট:
রাহিম    → নম্বর: [85, 72, 90], গড়: 82.3
করিম     → নম্বর: [78, 88, 65], গড়: 77.0
সালমা    → নম্বর: [92, 95, 88], গড়: 91.7
⚡ List Comprehension — সংক্ষিপ্ত List তৈরি

List Comprehension হলো Loop ও Condition ব্যবহার করে এক লাইনে নতুন List তৈরির সংক্ষিপ্ত পদ্ধতি।

Python — List Comprehension
# সাধারণ Loop পদ্ধতি
squares_loop = []
for i in range(1, 6):
    squares_loop.append(i ** 2)

# List Comprehension — এক লাইনে!
squares_comp = [i ** 2 for i in range(1, 6)]
print(squares_comp)    # [1, 4, 9, 16, 25]

# Condition সহ
even = [x for x in range(1, 21) if x % 2 == 0]
print(even)             # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# String থেকে বড় হাতে রূপান্তর
names  = ["rahim", "karim", "salma"]
upper  = [n.upper() for n in names]
print(upper)            # ['RAHIM', 'KARIM', 'SALMA']

# পাস করা ছাত্রদের বের করা
all_marks  = [45, 78, 28, 91, 55, 30, 67]
pass_marks = [m for m in all_marks if m >= 33]
print(f"পাসের নম্বর: {pass_marks}")
✔ আউটপুট
[1, 4, 9, 16, 25]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
['RAHIM', 'KARIM', 'SALMA']
পাসের নম্বর: [45, 78, 91, 55, 67]

List Comprehension কোডকে ছোট ও পড়তে সহজ করে। তবে খুব জটিল Comprehension এড়িয়ে চলো — সেক্ষেত্রে সাধারণ Loop বেশি স্পষ্ট।

🔒 Tuple — অপরিবর্তনীয় List

Tuple দেখতে List-এর মতো, কিন্তু একবার তৈরি করলে আর পরিবর্তন করা যায় না। Tuple তৈরি করতে ( ) ব্যবহার করা হয়।

Python — Tuple
# Tuple তৈরি
colors   = ("লাল", "সবুজ", "নীল")
point    = (10, 20)          # X, Y coordinate
single   = ("একটি",)         # একটি উপাদানের Tuple — কমা দরকার!
empty    = ()               # খালি Tuple

# Indexing ও Slicing — List-এর মতোই
print(colors[0])         # লাল
print(colors[-1])        # নীল
print(colors[1:3])       # ('সবুজ', 'নীল')

# Tuple Unpacking
x, y = point
print(f"X={x}, Y={y}")

# পরিবর্তন করা যায় না — Error আসবে!
# colors[0] = "হলুদ"   ← TypeError: 'tuple' does not support item assignment

# তবে Tuple Methods আছে
nums = (1, 2, 3, 2, 4, 2)
print(f"2 কতবার: {nums.count(2)}")    # 3
print(f"3-এর index: {nums.index(3)}") # 2
✔ আউটপুট
লাল
নীল
('সবুজ', 'নীল')
X=10, Y=20
2 কতবার: 3
3-এর index: 2
⚖️ List বনাম Tuple — কখন কোনটি?
📋 List [ ]
  • ✅ পরিবর্তন করা যায় (Mutable)
  • ✅ যোগ, বাদ, আপডেট সম্ভব
  • ✅ append, remove, sort ইত্যাদি
  • ❌ Tuple-এর চেয়ে বেশি Memory নেয়
  • ❌ Tuple-এর চেয়ে কিছুটা ধীর
  • 🔑 যখন ডেটা বদলাবে তখন
🔒 Tuple ( )
  • ❌ পরিবর্তন করা যায় না (Immutable)
  • ❌ কোনো যোগ/বাদ নেই
  • ✅ শুধু count ও index Method
  • ✅ List-এর চেয়ে কম Memory নেয়
  • ✅ List-এর চেয়ে দ্রুত
  • 🔑 Fixed ডেটার জন্য (coordinates, dates)
Python — কখন কোনটি?
# Tuple ব্যবহার করো — Fixed ডেটা
days_of_week  = ("রবি", "সোম", "মঙ্গল", "বুধ", "বৃহ", "শুক্র", "শনি")
dhaka_coord   = (23.8103, 90.4125)
rgb_green     = (0, 255, 0)

# List ব্যবহার করো — পরিবর্তনযোগ্য ডেটা
shopping_cart = ["চাল", "ডাল"]    # পরে যোগ/বাদ হবে
students      = ["রাহিম", "করিম"] # নতুন ছাত্র যোগ হবে

# Tuple থেকে List এবং List থেকে Tuple
t = (1, 2, 3)
l = list(t)   # Tuple → List
t2= tuple(l)  # List → Tuple
print(type(l), l)
print(type(t2), t2)
✔ আউটপুট
<class 'list'> [1, 2, 3]
<class 'tuple'> (1, 2, 3)
🎓 প্র্যাকটিক্যাল প্রজেক্ট — Student Result System

List-এর সব ধারণা ব্যবহার করে একটি সম্পূর্ণ Student Result System তৈরি করি। ছাত্র যোগ করা, নম্বর দেওয়া, মেধা তালিকা তৈরি — সবকিছু।

💻 প্রজেক্ট: Student Result System

ছাত্রদের নাম ও নম্বর সংরক্ষণ করে গড়, গ্রেড ও মেধা তালিকা তৈরি করবে।

Python — student_result.py
# ছাত্রদের ডেটা
students = []

def add_student(naam, bangla, english, math, science):
    """ছাত্র যোগ করে।"""
    marks   = [bangla, english, math, science]
    total   = sum(marks)
    average = total / len(marks)

    if average >= 80:   grade = "A+"
    elif average >= 70: grade = "A"
    elif average >= 60: grade = "B"
    elif average >= 50: grade = "C"
    elif average >= 33: grade = "D"
    else:              grade = "F"

    students.append({
        "naam": naam, "marks": marks,
        "total": total, "average": average, "grade": grade
    })

def show_results():
    """মেধা তালিকা প্রিন্ট করে।"""
    ranked = sorted(students, key=lambda s: s["total"], reverse=True)

    print(f"\n{'='*52}")
    print(f"{'মেধা':4} {'নাম':10} {'মোট':6} {'গড়':7} {'গ্রেড':5}")
    print(f"{'='*52}")

    for rank, s in enumerate(ranked, 1):
        status = "✅" if s["grade"] != "F" else "❌"
        print(f"{rank:3}  {s['naam']:10} {s['total']:5}  {s['average']:5.1f}  {s['grade']:3} {status}")

    print(f"{'─'*52}")
    all_avg = [s["average"] for s in students]
    print(f"ক্লাস গড়: {sum(all_avg)/len(all_avg):.1f}")
    passed = len([s for s in students if s["grade"] != "F"])
    print(f"পাস: {passed}/{len(students)} জন")

# ছাত্র যোগ করা
add_student("রাহিম",   85, 72, 90, 78)
add_student("সালমা",   92, 95, 88, 91)
add_student("করিম",    55, 48, 62, 70)
add_student("নাসরিন",  78, 82, 75, 80)
add_student("জামাল",   25, 30, 28, 22)

show_results()
✔ আউটপুট
====================================================
মেধা  নাম        মোট    গড়    গ্রেড
====================================================
  1  সালমা      366   91.5  A+  ✅
  2  রাহিম      325   81.2  A+  ✅
  3  নাসরিন     315   78.8  A   ✅
  4  করিম       235   58.8  C   ✅
  5  জামাল      105   26.2  F   ❌
────────────────────────────────────────────────────
ক্লাস গড়: 67.3
পাস: 4/5 জন
📚 এই পর্বে আমরা যা শিখলাম
  • List কী ও এর বৈশিষ্ট্য (Ordered, Mutable, Indexed)
  • List তৈরি, len(), in operator
  • Positive ও Negative Indexing
  • Slicing — list[start:stop:step]
  • List Update ও Delete (del)
  • গুরুত্বপূর্ণ Methods: append, insert, remove, pop, sort, reverse, index, count
  • Built-in Functions: sum, min, max, len
  • List with Loops — বাজারের হিসাব
  • Nested List — 2D ডেটা সংরক্ষণ
  • List Comprehension — এক লাইনে নতুন List
  • Tuple — Immutable, কম Memory, দ্রুত
  • List vs Tuple — কখন কোনটি ব্যবহার করবে
  • Student Result System প্রজেক্ট
🏋️ নিজে চেষ্টা করো
  1. Shopping Cart: items নামে একটি List তৈরি করো। পণ্য যোগ করো, সরাও, মোট দাম বের করো
  2. Top 3: ১০টি সংখ্যার List থেকে শীর্ষ ৩টি বের করো (sort ও slice ব্যবহার করো)
  3. Duplicate সরানো: একটি List থেকে সব duplicate উপাদান সরিয়ে unique List তৈরি করো
  4. Matrix যোগফল: দুটি 3×3 Nested List-এর প্রতিটি অবস্থানে যোগফল বের করো
  5. Vowel Count: একটি বাক্য থেকে সব vowel (a, e, i, o, u) List Comprehension দিয়ে বের করো
⏭️ পরের পর্বে কী থাকছে? — পর্ব ৮: Dictionaries ও Sets
  • Dictionary — key-value পেয়ারে ডেটা সংরক্ষণ
  • Dictionary তৈরি, access, update, delete
  • গুরুত্বপূর্ণ Dictionary Methods
  • Set — অনন্য মানের সংগ্রহ
  • Set Operations — Union, Intersection, Difference

Post a Comment

0 Comments