অভিধানের জন্য সেট পদ্ধতির (এবং পাইথন ৩.৯-এর সাথে আমরা যে অপরিষ্কার জগাখিচুড়ি করছি না তা নয়) পুরো সমর্থনটি পেয়ে ভাল লাগবে যাতে আপনি কীগুলির সেটগুলি কেবল "মুছে ফেলতে" পারেন। যাইহোক, যতক্ষণ না এটি হয় না, এবং আপনার কাছে সম্ভাব্য সংখ্যক কীগুলি মুছে ফেলার জন্য একটি বৃহত অভিধান রয়েছে, আপনি পারফরম্যান্স সম্পর্কে জানতে চাইতে পারেন। সুতরাং, আমি এমন কিছু কোড তৈরি করেছি যা অর্থপূর্ণ তুলনার জন্য যথেষ্ট বড় কিছু তৈরি করে: একটি 100,000 x 1000 ম্যাট্রিক্স, সুতরাং মোট 10,000,00 আইটেম।
from itertools import product
from time import perf_counter
# make a complete worksheet 100000 * 1000
start = perf_counter()
prod = product(range(1, 100000), range(1, 1000))
cells = {(x,y):x for x,y in prod}
print(len(cells))
print(f"Create time {perf_counter()-start:.2f}s")
clock = perf_counter()
# remove everything above row 50,000
keys = product(range(50000, 100000), range(1, 100))
# for x,y in keys:
# del cells[x, y]
for n in map(cells.pop, keys):
pass
print(len(cells))
stop = perf_counter()
print(f"Removal time {stop-clock:.2f}s")
10 মিলিয়ন আইটেম বা আরও কিছু কিছু সেটিংসে অস্বাভাবিক নয়। আমার স্থানীয় মেশিনে দুটি পদ্ধতির তুলনা করে আমি ব্যবহার করার সময় সামান্য উন্নতি দেখতে পাচ্ছি map
এবং pop
সম্ভবত কম ফাংশন কল করার কারণে, তবে উভয়ই আমার মেশিনে প্রায় 2.5 শতাংশ সময় নেয়। তবে প্রথম স্থানে (55 এর দশকে) বা লুপের মধ্যে থাকা চেক সহ অভিধান তৈরি করতে প্রয়োজনীয় সময়ের তুলনায় এই প্লেসগুলি। যদি এটি সম্ভবত হয় তবে এমন একটি সেট তৈরি করা সেরা যা অভিধান কী এবং আপনার ফিল্টারের ছেদ হয় is
keys = cells.keys() & keys
সংক্ষেপে: del
ইতিমধ্যে ভারী অনুকূলিতকরণ করা হয়েছে, সুতরাং এটি ব্যবহারের বিষয়ে চিন্তা করবেন না।