কম্পিউটার টিউটোরিয়াল

পাইথন - ২D অ্যারে/লিস্ট সঠিকভাবে তৈরি করার পদ্ধতি

পাইথনে ২D লিস্ট (ম্যাট্রিক্স) তৈরি করার সময় একটি সাধারণ ভুল হয়: [[0]*cols]*rows। এটি সকল রোকে একই লিস্ট অবজেক্টের রেফারেন্স बनाয়, ফলে একটি রো পরিবর্তন করলে সব রো বদলায়। সঠিক পদ্ধতি নিচে দেওয়া হলো।

ভুল পদ্ধতি (শ্যালো কপি সমস্যা)

rows, cols = (5, 5)
arr = [[0]*cols]*rows   # ভুল! সব রো একই অবজেক্ট

arr[0][0] = 1
for row in arr:
    print(row)
# আউটপুট:
# [1, 0, 0, 0, 0]
# [1, 0, 0, 0, 0]
# [1, 0, 0, 0, 0]
# [1, 0, 0, 0, 0]
# [1, 0, 0, 0, 0]  ← সব রোই বদলায়!

সঠিক পদ্ধতি: লিস্ট কাম্প্রিহেনশন (ডিপ কপি)

rows, cols = (5, 5)
arr = [[0 for i in range(cols)] for j in range(rows)]  # সঠিক!

arr[0][0] = 1
for row in arr:
    print(row)
# আউটপুট:
# [1, 0, 0, 0, 0]
# [0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0]  ← শুধু প্রথম রো বদলল

অন্যান্য সঠিক পদ্ধতিগুলো

NumPy ব্যবহার করে (সাংখ্যিক কাজের জন্য সেরা)

import numpy as np

arr = np.zeros((rows, cols), dtype=int)
arr[0][0] = 1
print(arr)
# [[1 0 0 0 0]
#  [0 0 0 0 0]
#  [0 0 0 0 0]
#  [0 0 0 0 0]
#  [0 0 0 0 0]]

copy.deepcopy ব্যবহার করে

import copy
row = [0]*cols
arr = [copy.deepcopy(row) for _ in range(rows)]

itertools.repeat ব্যবহার করে (একটু আধুনিক)

from itertools import repeat
arr = [list(repeat(0, cols)) for _ in range(rows)]

কেন সমস্যা হয়? (ভিজ্যুয়াল ব্যাখ্যা)

# ভুল পদ্ধতিতে:
# arr = [row, row, row, row, row]  # ৫টি আলাদা রো নয়, একই রোর ৫টি রেফারেন্স

# সঠিক পদ্ধতিতে:
# arr = [row1, row2, row3, row4, row5]  # ৫টি সম্পূর্ণ স্বতন্ত্র রো

সুপারিশ

  • সাধারণ লিস্ট: [[0]*cols for _ in range(rows)] বা [[0 for _ in range(cols)] for _ in range(rows)]
  • সাংখ্যিক কম্পিউটিং: NumPy np.zeros((rows, cols)) — দ্রুত, মেমরি-দক্ষ এবং গাণিতিক অপারেশন সাপোর্ট করে।
  • মিউটেবল ডিফল্ট ভ্যালু: ফাংশন আর্গুমেন্টে matrix=None দিয়ে ভিতরে ইнициালাইজ করুন।
  1. Windows 10-এ Sticky Notes: সঠিকভাবে ব্যবহার করার পদ্ধতি

  2. Python দিয়ে বাইনারি ট্রিতে একটি নোডের ডানে অবস্থিত নোড বের করার প্রোগ্রাম

  3. পাইথনে pydoc মডিউল দিয়ে ডকুমেন্টেশন জেনারেশন

  4. পাইথনে বল ক্যাচিং গেম তৈরি