লিস্টে একটি থ্রেশহোল্ড (K) এর চেয়ে বড় কতগুলো উপাদান আছে তা গণনা করা একটি সাধারণ টাস্ক। নিচে তিনটি পদ্ধতির উদাহরণ এবং পারফরম্যান্স তুলনা দেওয়া হলো।
উদাহরণ
test_list = [1, 7, 5, 6, 3, 8] k = 4 # ৪-এর চেয়ে বড়: 7, 5, 6, 8 → ৪টি # প্রত্যাশিত আউটপুট: 4
১. for লুপ (নেভ, বোঝার জন্য সহজ)
count = 0
for i in test_list:
if i > k:
count += 1
print("৪-এর চেয়ে বড় সংখ্যা:", count)
২. লিস্ট কাম্প্রিহেনশন + len() (পাইথনিক)
count = len([i for i in test_list if i > k])
print("৪-এর চেয়ে বড় সংখ্যা:", count)
৩. sum() + জেনারেটর এক্সপ্রেশন (সর্বাধিক দক্ষ, মেমরি-ফ্রেন্ডলি)
count = sum(i > k for i in test_list)
print("৪-এর চেয়ে বড় সংখ্যা:", count)
# i > k বুলিয়ান রিটার্ন করে (True=1, False=0), sum() যোগ করে
আউটপুট (সব পদ্ধতির জন্য একই)
৪-এর চেয়ে বড় সংখ্যা: 4
পারফরম্যান্স তুলনা (১০ মিলিয়ন উপাদানের জন্য)
| পদ্ধতি | টাইম কমপ্লেক্সিটি | মেমরি | রিলেটিভ স্পিড | সুপারিশ |
|---|---|---|---|---|
| for লুপ | O(N) | O(1) | ১.০x (বেসলাইন) | বিগিনার, ডিবাগিং |
| len([...]) | O(N) | O(N) | ~১.২x ধীর | ছোট লিস্ট, পঠনযোগ্য |
| sum(gen) | O(N) | O(1) | ~০.৮x (দ্রুততম) | প্রোডাকশন, বড় ডেটা |
NumPy ব্যবহার করে (সাংখ্যিক অ্যারের জন্য)
import numpy as np arr = np.array([1, 7, 5, 6, 3, 8]) count = np.sum(arr > k) # ভেক্টরাইজড, খুব দ্রুত print(count) # 4
অতিরিক্ত: মানগুলিও পাওয়া যাক
# শুধু কাউন্ট নয়, মানগুলিও চাইলে
greater_values = [i for i in test_list if i > k]
print("মানগুলো:", greater_values) # [7, 5, 6, 8]
print("কাউন্ট:", len(greater_values))
সেরা অনুশীলন
- সাধারণ পাইথন লিস্ট:
sum(1 for x in lst if x > k)বাsum(x > k for x in lst)। - NumPy অ্যারে:
np.sum(arr > k)(১০-১০০x দ্রুত)। - পান্ডাস Series:
(series > k).sum()। - সর্টেড লিস্ট থাকলে
bisectমডিউল দিয়ে O(log N)-এ করা যায়।