آنچه در این مقاله میخوانید
مقدمهای بر تابع enumerate در Python
۴ تیر ۱۴۰۰

پیمایش انواع دادهها یکی از متداولترین کارهایی است که هر برنامهنویس در پروژههای مختلف با آن سروکار دارد بنابراین یادگیری یک تکنیک اساسی و درست میتواند تاثیر بسیار زیادی در عملکرد برنامههای شما داشته باشد. حال ما در این مقاله تصمیم داریم تابع enumerate
که بهصورت پیشفرض در Python 3 ارائه شده است را به شما معرفی کنیم.
در این مقاله خواهید خواند:
- معرفی و نحوه کارکرد تابع enumerate
- متد enumerate پایتون
- جمع بندی
اما قبل از پرداختن به اصل موضوع، آیا این سوال برای شما پیش آمده که چرا اکثر توسعهدهندگان در اسکریپتهای 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
برویم.
آموزش استفاده از تابع Zip در زبان Python را در مقاله زیر میتوانید مطالعه کنید.
تابع Zip در زبان Python
معرفی و نحوه کارکرد تابع 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)
متد enumerate پایتون
Enumerate یک متد داخلی پایتون است. نمی توان مفید بودن آن را در یک خط خلاصه کرد. با این حال، اکثر تازه واردان و حتی برخی از برنامه نویسان حرفهای از آن بی اطلاع هستند. این به ما اجازه می دهد تا روی چیزی حلقه بزنیم و یک شمارنده خودکار داشته باشیم. به عنوان مثال:
y_list = ['apple', 'banana', 'grapes', 'pear']
for counter, value in enumerate(my_list):
print counter, value
# Output:
# 0 apple
# 1 banana
# 2 grapes
# 3 pear
و موارد بیشتری وجود دارد! enumerate همچنین یک آرگومان اختیاری را می پذیرد که به ما اجازه می دهد شاخص شروع شمارنده را مشخص کنیم.
my_list = ['apple', 'banana', 'grapes', 'pear']
for c, value in enumerate(my_list, 1):
print(c, value)
# Output:
# 1 apple
# 2 banana
# 3 grapes
# 4 pear
نمونه ای از مواردی که enumerate برشمردن مفید است، ایجاد tuple حاوی item و index با استفاده از یک لیست است. به عنوان مثال:
my_list = ['apple', 'banana', 'grapes', 'pear']
counter_list = list(enumerate(my_list, 1))
print(counter_list)
# Output: [(1, 'apple'), (2, 'banana'), (3, 'grapes'), (4, 'pear')]
همین حالا هاست ابری Python رو سفارش بدید و پروژهتون رو با سرعت بالا راهاندازی کنید!
✅ دامنه رایگان ✅ ترافیک نامحدود ✅ هزینه ساعتی
خرید هاست ابری Python
جمعبندی
تابع enumerate یکی از ابزارهای ساده اما بسیار کاربردی در Python است که به شما امکان میدهد هنگام پیمایش توالیهایی مثل لیستها، بهطور همزمان به اندیس (index) و مقدار (value) هر عنصر دسترسی داشته باشید.
در حالی که بسیاری از توسعهدهندگان تازهکار به استفاده از ترکیب range(len(…)) برای پیمایش عادت دارند، enumerate راهحلی خواناتر، پایتونیتر و ایمنتر ارائه میدهد. این تابع نهتنها کد شما را تمیزتر میکند، بلکه قابلیت شروع شمارش از یک اندیس دلخواه را نیز فراهم میسازد. همچنین، میتوان از enumerate برای تولید لیستهایی از tupleها که شامل شمارهگذاری و مقدار هستند استفاده کرد، که در بسیاری از سناریوهای واقعی مثل نمایش لیستها، لاگبرداری یا تحلیل داده مفید است.