مقدمه‌ای بر تابع enumerate در Python

مقدمه‌ای بر تابع 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)
برچسب‌ها:

خدمات رایگان لیارا

۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

هاست رایگان برای دیتابیس‌

دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

سرویس DNS رایگان

به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

۱۰۰ هزار تومان اعتبار اولیه

بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید و فقط برای بیش از آن هزینه پرداخت کنید. (به‌همراه دسترسی SMTP)

هاست رایگان برای انواع وبسایت

تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

توسعه‌دهندگان درباره‌ی ما چه می‌گویند

تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...

MohammadReza
liara testimonial
keikaavousi

بعد از بسته شدن @fandoghpaas و ناراحتی همه‌مون از اینکه یه سرویس خوب و صادق نمی‌تونه از پس هزینه‌ها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوت‌هایی داشت که کمی کار می‌خواست ولی تا الان کاملا راضی.

jadi
liara testimonial
jadi

یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.

Arch
liara testimonial
EbadiDev

واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیت‌های سرویس دیتابیس‌شون اینه که خودشون به صورت دوره‌ای بکآپ میگیرن.
...

Ali Najafi
liara testimonial
me_ali_najafi

یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@

Navid
liara testimonial
1navid

عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم

Amir H Shekari
liara testimonial
vanenshi

همراه شما هستیم

در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
تلفن واحد فروش:
۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)