in অপারেটর লিস্টে O(n) টাইম কমপ্লেক্সিটিতে কাজ করে (লিনিয়ার সার্চ)। বড় লিস্টে এটি ধীর।
সমাধান: সেট (set) বা ডিকশনারি (dict) ব্যবহার করুন
হ্যাশ-ভিত্তিক ডেটা স্ট্রাকচার (set, dict) লুকআপ ~O(1) টাইমে করে।
# ধীর - লিস্টে in my_list = list(range(1000000)) %timeit 999999 in my_list # ~5ms # দ্রুত - সেটে in my_set = set(range(1000000)) %timeit 999999 in my_set # ~50ns (100,000x দ্রুত!)
ট্রেড-অফ বিবেচনা
- লুকআপ: সেট/ডিক্ট O(1) - অনেক দ্রুত
- ইনসারশন: সেট/ডিক্ট O(1) অ্যামোর্টাইজড, কিন্তু লিস্টের
append()(O(1)) চেয়ে স্লো - মেমরি: সেট/ডিক্ট বেশি মেমরি নেয়
- অর্ডার: পাইথন ৩.৭+ ডিক্ট অর্ডার প্রিজার্ভ করে, সেট অর্ডারড নয়
কখন কী ব্যবহার করবেন
- ফ্রিকোয়েন্ট লুকআপ, র্যার ইনসারশন → Set/Dict
- ফ্রিকোয়েন্ট ইনসারশন, র্যার লুকআপ → List
- অর্ডার মেইনটেইন + লুকআপ → Dict (Python 3.7+) বা
collections.OrderedDict