مقدمهای بر تابع enumerate در Python
۴ تیر ۱۴۰۰
پیمایش انواع دادهها یکی از متداولترین کارهایی است که هر برنامهنویس در پروژههای مختلف با آن سروکار دارد بنابراین یادگیری یک تکنیک اساسی و درست میتواند تاثیر بسیار زیادی در عملکرد برنامههای شما داشته باشد. حال ما در این مقاله تصمیم داریم تابع enumerate
که بهصورت پیشفرض در Python 3 ارائه شده است را به شما معرفی کنیم.
اما قبل از پرداختن به اصل موضوع، آیا این سوال برای شما پیش آمده که چرا اکثر توسعهدهندگان در اسکریپتهای Python خود از متد range
در حلقهی for
برای پیمایش لیستها استفاده میکنند؟ در جواب این سوال باید به پیشزمینه و تجربهی هر توسعهدهنده نگاه کرد. برای مثال اگر توسعهدهندهای قبلا از زبانهای C و PHP بهعنوان ابزار کار خود استفاده کرده باشد، در این زبانها استفاده از متغیرهای افزاینده i++
در حلقهی for
یک روش متداول برای پیمایش ایندکسهای هر آرایه است:
<?php
$scores = [54, 67, 48, 99, 27];
for ($i = 0; $i < count($scores); $i++) {
echo "{$i} {$scores[$i]} \n";
}
خروجی کدهای فوق به شکل زیر خواهد بود:
0 54
1 67
2 48
3 99
4 27
حال اگر فردی با این پیشزمینه بخواهد از زبان Python استفاده کند، بهدنبال راهحلی مشابه است و برای پیادهسازی همین روش در زبان Python میتوان از حلقهی for
و متد range
استفاده کرد اما مشکلی وجود دارد و آن هم نامناسب بودن این روش برای پیمایش دادهها است زیرا اگر فرض را بر این بگیریم که میخواهیم لیستی را پیمایش کنیم، خود لیست در این روش پیمایش نمیشود و ما از یک متغیر برای فراخوانی مقدار ایندکسها استفاده میکنیم. بااینحال استفاده از حلقهی for
و متد range
هنوز میان توسعهدهندگان Python رواج دارد:
scores = [54, 67, 48, 99, 27]
for i in range(len(scores)):
print(i, scores[i])
اکنون زمان آن است که بهسراغ معرفی و نحوهی استفاده از تابع enumerate
برویم.
معرفی و نحوهی استفاده از تابع enumerate
تابع enumerate
با سینتکس enumerate(sequence, start=0)
را میتوان در بخشها و شرایطهای مختلفی از پروژه استفاده کرد اما بیایید همان حلقهی for
که در مثال بخش قبل آورده شده است را درنظر بگیریم. در حلقهی for
از تابع enumerate
میتوان بهعنوان یک پیماینده استفاده کرد که انواع دادههای مختلف قابل پیمایشی مانند List، Tuple، String و Dictionary را در پارامتر اول دریافت میکند.
در پارامتر دوم نیز میتوان ایندکسی که میخواهید پیمایش از آن شروع شود را وارد کرد که البته وارد کردن پارامتر دوم اختیاری است و اگر دومین پارامتر وارد نشود، پیمایش از ایندکس شمارهی 0 شروع میشود:
scores = [54, 67, 48, 99, 27]
for i, score in enumerate(scores):
print(i, score)
همانطور که مشاهده میکنید این کد بسیار تمیزتر است و دیگری نیازی نیست تا از متد range
و متغیرهای افزاینده برای فراخوانی ایندکسهای مختلف مورد نظر خود استفاده کنید. همچنین میتوانید با وارد کردن پارامتر دوم به تابع enumerate
از ایندکس دیگری پیمایش توالی ورودی را شروع کنید:
scores = [54, 67, 48, 99, 27]
for i, score in enumerate(scores, 1):
print(i, score)