@ EriF89 কে দেখানোর জন্য পরীক্ষার নতুন সেট হিসাবে এখনও এই সমস্ত বছর পরে সঠিক:
$ python -m timeit -s "l={k:k for k in xrange(5000)}" "[i for i in xrange(10000) if i in l]"
1000 loops, best of 3: 1.84 msec per loop
$ python -m timeit -s "l=[k for k in xrange(5000)]" "[i for i in xrange(10000) if i in l]"
10 loops, best of 3: 573 msec per loop
$ python -m timeit -s "l=tuple([k for k in xrange(5000)])" "[i for i in xrange(10000) if i in l]"
10 loops, best of 3: 587 msec per loop
$ python -m timeit -s "l=set([k for k in xrange(5000)])" "[i for i in xrange(10000) if i in l]"
1000 loops, best of 3: 1.88 msec per loop
এখানে আমরা একটিকেও তুলনা করি tuple
যা lists
কিছু ব্যবহারের ক্ষেত্রে (এবং কম স্মৃতি ব্যবহারের চেয়ে) দ্রুত বলে পরিচিত । tuple
সন্ধানের সারণির ক্ষেত্রে, সংযোজন আর ভাল নয়।
উভয় dict
এবং set
খুব ভাল অভিনয়। স্বতন্ত্রতা সম্পর্কে @ সাইলেন্টগোস্টের উত্তরের সাথে এটি একটি আকর্ষণীয় বিন্দুটি নিয়ে আসে: যদি কোনও ওপিতে কোনও ডাটা সেটে 10 এম মান থাকে এবং যদি সেগুলিতে সদৃশ থাকে তবে এটি অজানা হতে পারে তার উপাদানগুলির একটি সেট / ডিকটি সমান্তরালে রাখার জন্য উপযুক্ত হবে would প্রকৃত ডেটা সেট এবং সেই সেট / ডিকটিতে অস্তিত্বের জন্য পরীক্ষার সাথে। এটি সম্ভব 10 এম ডেটা পয়েন্টগুলির মধ্যে কেবল 10 টি অনন্য মান রয়েছে যা অনুসন্ধানের জন্য অনেক কম স্থান!
ডিক্টস সম্পর্কে সাইলেন্টগোস্টের ভুলটি প্রকৃতপক্ষে আলোকিত হয় কারণ ডুপ্লিকেট করা ডেটা (মানগুলিতে) একটি ননডপ্লিকেটেড সেট (কী) এর সাথে সম্পর্কযুক্ত করার জন্য ডিক ব্যবহার করতে পারে এবং এইভাবে একটি ডেটা অবজেক্টকে সমস্ত ডেটা ধরে রাখতে পারে, তবুও তদন্তের টেবিলে দ্রুত থাকা উচিত। উদাহরণস্বরূপ, একটি ডিক কীটি সন্ধান করা মান হতে পারে এবং মানটি একটি কাল্পনিক তালিকায় সূচকগুলির তালিকা হতে পারে যেখানে সেই মানটি ঘটেছিল।
উদাহরণস্বরূপ, যদি অনুসন্ধান করা উত্স ডেটা তালিকাটি ছিল l=[1,2,3,1,2,1,4]
, এটি এই ডিকের পরিবর্তে অনুসন্ধান এবং মেমরি উভয়ের জন্যই অনুকূলিত করা যেতে পারে:
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> l=[1,2,3,1,2,1,4]
>>> for i, e in enumerate(l):
... d[e].append(i)
>>> d
defaultdict(<class 'list'>, {1: [0, 3, 5], 2: [1, 4], 3: [2], 4: [6]})
এই আদেশের সাহায্যে, কেউ জানতে পারবেন:
- যদি মানটি মূল ডেটাসেটে থাকে (যেমন
2 in d
প্রত্যাবর্তন True
)
- যেখানে মানটি মূল ডেটাসেটে ছিল (যেমন
d[2]
সূচকগুলির তালিকা প্রদান করে যেখানে মূল তথ্য তালিকায় ডেটা পাওয়া গেছে [1, 4]
:)