راه حل تک گذری در زبان پایتون چیست ؟
راه حل تک گذری در زبان پایتون چیست ؟
اگرچه این برنامه کار میکند، اما از نظر کارایی، توانایی چندانی ندارد. هـر بـار کـه ایـن برنامـه inBucket را صدا میزند، سراسر لیست را میپیماید. همچنان که تعداد طبقـات افـزایش مـییابـد، پیمایش لیست به دفعات زیادي تکرار میشود. بهتر است عبور واحدي از روي لیست داشته باشیم و براي هر مقدار، اندیس طبقـهاي را کـه در آن قرار گرفته محاسبه نماییم. سپس میتوانیم شمارندة مربوط را افزایش دهیم. در بخش قبل، اندیسی بهنام i گرفتیم و آن را در bucketWidth ضرب کردیم تا حد پـایین طبقۀ داده شده را بیابیم. اکنون میخواهیم مقداري در بازة 0.0 تا 0.1 بگیریم و انـدیس طبقـهاي را که در آن قرار گرفته پیدا کنیم. از آنجا که این مسئله عکس مسئلۀ قبل است، ممکن است حـدس زده باشید که بهجاي ضرب در bucketWidth باید عمل تقسیم را انجام دهید. این حدس درست است. از آنجا کـه numBuckets / 0.1 = bucketWidth ، تقسـیم بـر bucketWidth معادل ضرب در numBuckets است. اگر عـددي را از بـازة 0.0 تـا 1.0 در numBucket ضـرب کنیم عددي در بازة 0.0 تا numbuckets بهدست میآوریم. اگر آن عـدد را بـه کوچـکتـرین عـدد صحیح بعدي گرد کنیم، دقیقاً آنچه را که بـهدنبـال آن بـودیم یعنـی یـک انـدیس طبقـه را بـه دسـت میآوریم:
numBuckets = 8
buckets = [0] * numBuckets
for i in list:
index = int(i * numBuckets)
buckets[index] = buckets[index] + 1
ما از تابع int بهمنظور تبدیل یک عدد اعشاري به عددي صحیح استفاده کردهایم. آیا امکان دارد محاسبات فوق، اندیسی خارج از محدوده تولید کند؟ (اندیسی منفی یا بـزرگتـر (len(buckets)-1 از لیستی شبیه به buckets که شمارش تعداد مقادیر در هر بازه را نگه میدارد histogram نامیده میشود.
تمرین 9-5 :تابعی به نام histogram بنویسید که یک لیست و تعـداد طبقـات را بـهعنـوان
پارامتر بگیرد و یک histogram با تعداد طبقات داده شده برگرداند.
برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید