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

পাইথনে লিস্ট ইনিশিয়ালাইজেশন: কোন পদ্ধতিটি সবচেয়ে দ্রুত?

পাইথনে একই কাজ করার একাধিক পদ্ধতি থাকে। লিস্ট ইনিশিয়ালাইজেশন (initialization) এর ক্ষেত্রেও 마찬가지। তবে পারফরম্যান্সে পার্থক্য থাকতে পারে। পাইথন C++ বা Java-র চেয়ে ধীর, বিশেষ করে for লুপ। map(), filter() বা লিস্ট কমপ্রিহেনশন (list comprehension) সি (C)-তে লিখা থাকায় দ্রুত।

পারফরম্যান্স তুলনা (৫০০ বার রান করে গড়)


import time

forLoopTime = []
whileLoopTime = []
listComprehensionTime = []
starOperatorTime = []

for k in range(500):
    # ১. for loop + append()
    start = time.time()
    a = []
    for i in range(10000):
        a.append(0)
    stop = time.time()
    forLoopTime.append(stop - start)
    
    # ২. while loop + append()
    start = time.time()
    a = []
    i = 0
    while i < 10000:
        a.append(0)
        i += 1
    stop = time.time()
    whileLoopTime.append(stop - start)
    
    # ৩. List comprehension
    start = time.time()
    a = [0 for i in range(10000)]
    stop = time.time()
    listComprehensionTime.append(stop - start)
    
    # ৪. Star operator (*)
    start = time.time()
    a = [0] * 10000
    stop = time.time()
    starOperatorTime.append(stop - start)

print("Average time taken by for loop: " + str(sum(forLoopTime)/500))
print("Average time taken by while loop: " + str(sum(whileLoopTime)/500))
print("Average time taken by list comprehensions: " + str(sum(listComprehensionTime)/500))
print("Average time taken by * operator: " + str(sum(starOperatorTime)/500))

ফলাফল (টিপিক্যাল আউটপুট)

Average time taken by for loop: 0.0062
Average time taken by while loop: 0.0089
Average time taken by list comprehensions: 0.0032
Average time taken by * operator: 0.00037

বিশ্লেষণ

  1. Star operator ([0]*n): সবচেয়ে দ্রুত। একই অবজেক্ট রিপিট করে (immutable অবজেক্টের জন্য নিরাপদ)।
  2. List comprehension: for loop-র চেয়ে প্রায় ২গুন দ্রুত। পাইথনিক (Pythonic) পদ্ধতি।
  3. For loop + append(): স্ট্যান্ডার্ড পদ্ধতি, পড়লেও বুঝতে সহজ।
  4. While loop: সবচেয়ে ধীর। পাইথনে এড়াতে ভালো।

সাবধানতা: Star operator-র সাথে mutable অবজেক্ট


# ভুল: সব সাবলিস্ট একই অবজেক্ট রেফার করবে
matrix = [[0]*3]*3  # [[0,0,0], [0,0,0], [0,0,0]] - কিন্তু তিনটিই একই লিস্ট!
matrix[0][0] = 1    # সব সারির প্রথম এলিমেন্ট ১ হয়ে যাবে

# সঠিক: List comprehension
matrix = [[0]*3 for _ in range(3)]  # প্রতিটি সারি আলাদা লিস্ট

সারাংশ

  • Immutable ভ্যালু (int, str, tuple) এর জন্য [val]*n সেরা।
  • Mutable অবজেক্ট (list, dict) এর জন্য লিস্ট কমপ্রিহেনশন ব্যবহার করুন।
  • পড়ার সুবিধার্থে লিস্ট কমপ্রিহেনশন ভালো অভ্যাস।
  1. Tkinter Python-এ উইন্ডোকে Мак্সিমাইজড অবস্থায় ইনিশিয়ালাইজ করা

  2. পাইথনে ভেক্টরাইজেশন (Vectorization) – পারফরম্যান্স অপ্টিমাইজেশন

  3. পাইথনে টাইম ফাংশন (Time Functions)

  4. পাইথন লিস্ট মাস্টার করুন: তৈরি, অ্যাক্সেস এবং ম্যানিপুলেশন