تابع enumerate در پایتون ابزاری ساده و قدرتمند برای پیمایش مجموعه داده‌های مختلف است. این تابع امکان دسترسی همزمان به عناصر و موقعیت آن‌ها در یک مجموعه داده را فراهم می‌کند. از این قابلیت تابع enumerate در پروژه‌های واقعی برای ثبت لاگ، نمایش لیست‌های شماره‌گذاری شده، پردازش ماتریس‌های چندبعدی و ساخت دیکشنری استفاده می‌شود. در این مطلب از مجله فرادرس به زبان ساده تابع enumerate در پایتون همراه با مثال‌های کاربردی آموزش داده شده است. با مطالعه این مطلب با نحوه استفاده از تابع enumerate و کاربردهای مختلف آن در پروژه‌های پایتون آشنا خواهید شد. یادگیری این تابع به شما کمک می‌کند تا کدهایی تمیز، خوانا و کارآمد بنویسید.

آنچه در این مطلب می‌آموزید:

  • با تابع enumerate در پایتون و کاربرد آن آشنا می‌شوید.

  • سینتکس این تابع و نحوه اجرای آن را یاد می‌گیرید.

  • خروجی و رفتار تابع را با مثال‌های ساده بررسی می‌کنید.

  • با مثال‌های واقعی، عملکرد این تابع را بهتر درک می‌کنید.

  • می‌آموزید چگونه از enumerate در حلقه‌های for استفاده کنید.

  • با ترکیب enumerate با لیست‌ها، تاپل‌ها و zip آشنا می‌شوید.

فهرست مطالب این نوشته
997696

تابع enumerate در پایتون چیست؟

تابع enumerate در زبان پایتون یک ابزار ساده و کاربردی برای پیمایش مجموعه داده‌های مختلف نظیر لیست، تاپل، رشته، دیکشنری و سایر موارد دیگر است. هر چند با ساختارهای حلقه for و while نیز امکان پیمایش مجموعه داده‌ها وجود دارد، ولی مزیت پیمایش مجموعه داده‌ها با تابع enumerate در این است که این تابع امکان دسترسی همزمان به عناصر و اندیس آن‌ها را فراهم می‌کند.

به زبان ساده، تابع enumerate یک شمارنده به هر عنصر موجود در مجموعه داده اضافه کرده و امکان پیمایش آن را فراهم می‌کند. enumerate یکی از توابع داخلی پایتون است و برای استفاده از آن نیازی به اضافه کردن کتابخانه یا ماژول جداگانه‌ای نیست.

ستون های چوبی با دانه ها و اعداد روی دانه های چوبی - تابع enumerate در پایتون

سینتکس تابع enumerate در پایتون

سینتکس پیاده‌سازی تابع enumerate در پایتون به صورت زیر است.

این تابع به عنوان ورودی ۲ آرگومان دریافت می‌کند که در ادامه توضیح داده شده‌اند.

  • iterable: این پارامتر یک شی «قابل پیمایش» (iterable) را مشخص می‌کند که می‌تواند لیست، تاپل، دیکشنری یا مجموعه داده دیگری باشد.
  • startIndex: نقطه شروع پیمایش توسط این پارامتر مشخص می‌شود که به صورت پیش‌فرض مقدار آن برابر 0 است. در واقع، قرار دادن این پارامتر اختیاری است و در صورت تنظیم نشدن مقدار برای آن برابر 0 در نظر گرفته می‌شود.

به عبارت ساده‌تر، برای استفاده از تابع enumerate تنها ارسال یک مجموعه داده به آن کافی است. در صورت نیاز به مشخص کردن نقطه شروع پیمایش می‌توان پارامترstartIndex را مقداردهی کرد.

آرگومان های ورودی تابع enumerate در پایتون

مثالی ساده از پیاده‌سازی تابع enumerate در پایتون

برای درک بهتر نحوه پیاده‌سازی تابع enumerate مثال زیر آورده شده است.

در مثال بالا لیستfruitLst با ۴ عنصر تعریف شده است که با تابع enumerate پیمایش می‌شود. خروجی تابع enumerate بعد از پیمایش در متغیرnewLst ذخیره خواهد شد. در نهایت با دستور print خروجی چاپ می‌شود.

The newly created list:
[(0, 'Grapes'), (1, 'Apple'), (2, 'Banana'), (3, 'Kiwi')]

در این مثال سعی شد با تابع enumerate به تک‌تک عناصر لیست دسترسی پیدا کنیم.

خروجی تابع enumerate در پایتون

تابع enumerate بعد از پیمایش مجموعه داده یک شی از نوع enumerate را به عنوان خروجی برمی‌گرداند که خود یک شی قابل پیمایش است. در خروجی تابع enumerate به جای هر عنصر پیمایش شده یک زوج مرتب «اندیس – مقدار» (index – value) برگشت داده می‌شود. نکته مهم در خصوص خروجی تابع enumerate این است که برای مشاهده نتیجه باید خروجی تابع به یک مجموعه داده تبدیل شود.

در مثال بالا، خروجی تابع enumerate بدون تبدیل به مجموعه داده در خروجی چاپ شده است که نتیجه آن به صورت زیر خواهد بود.

enumerate object at 0x...

برای مشاهده خروجی تابع enumerate باید خروجی به مجموعه داده تبدیل شود که قطعه کد زیر این مورد را نشان می‌دهد.

در نهایت، خروجی آن به صورت زیر نمایش داده خواهد شد.

[(0, 'apple'), (1, 'banana'), (2, 'cherry')]

درک آسان تابع enumerate در پایتون با مثالی از دنیای واقعی

به زبان ساده تابع enumerate امکان دسترسی همزمان به عناصر و اندیس آن‌ها را در زمان پیمایش یک مجموعه داده فراهم می‌کند. برای یادگیری موثرتر زبان پایتون می‌توانید فیلم آموزش برنامه نویسی پایتون با مثال‌های عملی از فرادرس را مشاهده کنید که لینک آن در ادامه آورده شده است.

برای درک بهتر تابع enumerate یک صف از افراد با نام‌های مختلف را در نظر بگیرید که هر فرد در این صف جایگاه مشخصی دارد. حال قصد دارید نام هر فرد و جایگاهش در صف را پیدا کنید. برای دستیابی به نتیجه مطلوب دو راه‌حل وجود دارد.

  • روش معمول: باید یک شمارنده جداگانه تعریف شود. سپس، با استفاده از ساختار حلقه for صف پیمایش شود و شمارنده در هر مرحله افزایش پیدا کند. در نتیجه، می‌توان نام هر فرد درون صف را همراه با جایگاه آن در خروجی نمایش داد. قطعه کد زیر نحوه پیاده‌سازی را نشان می‌دهد.

  • روش ساده‌تر با تابع enumerate: تابع enumerate به صورت خودکار شماره‌گذاری را انجام می‌دهد و دیگر نیازی به تعریف شمارنده به صورت جداگانه نیست. قطعه کد زیر نحوه پیاده‌سازی مثال بالا با تابع enumerate را نشان می‌دهد.

در نهایت، خروجی هر دو قطعه کد یکسان و به صورت زیر خواهد بود.

Child number 0: Ali
Child number 1: Sara
Child number 2: Reza
Child number 3: Mary

استفاده از تابع enumerate موجب افزایش خوانایی، کاهش خطا و سریع‌تر شدن کد نویسی می‌شود. بنابراین، در صورت نیاز به عناصر و موقعیت آن‌ها در یک لیست به صورت همزمان بهتر است از تابع enumerate در پایتون استفاده شود.

یادگیری زبان محبوب پایتون با آموزش‌های فرادرس

بدون شک زبان برنامه نویسی پایتون یکی از محبوب‌ترین و پرکاربردترین زبان‌های برنامه نویسی جهان است. پایتون به دلیل سینتکس ساده و آسان گزینه‌ای بسیار عالی برای شروع یادگیری برنامه نویسی است. علاوه بر این، پایتون به عنوان یک زبان چندمنظوره شناخته می‌شود که در حوزه‌های مختلفی همچون توسعه وب، هوش مصنوعی، یادگیری ماشین، تحلیل داده، اینترنت اشیا و توسعه اپلیکیشن‌های مختلف کاربرد دارد. شرکت‌های کوچک و بزرگ بسیاری در سراسر جهان از پایتون استفاده می‌کنند که همین عامل بازار کار عالی پایتون را برای توسعه‌دهندگان تضمین می‌کند.

مجموعه فیلم‌های آموزش برنامه نویسی پایتون Python – مقدماتی تا پیشرفته فرادرس
با کلیک بر روی تصویر بالا می‌توانید به صفحه اصلی مجموعه فیلم‌های آموزش برنامه نویسی پایتون Python – مقدماتی تا پیشرفته، هدایت شوید.

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

با مشاهده این آموزش مقدمات و مفاهیم اولیه در زبان پایتون را یاد خواهید گرفت. سایر آموزش‌های پایتون در مجموعه فیلم‌های آموزش برنامه نویسی پایتون مقدماتی تا پیشرفته از فرادرس قابل دسترسی هستند. در ادامه تعدادی از دوره‌های پیشنهادی در این مجموعه آموزش آورده شده است.

آموزش استفاده از تابع enumerate در پایتون با مثال عملی

تابع enumerate به طور گسترده برای پیمایش مجموعه داده‌های مختلف مورد استفاده قرار می‎‌گیرد. مهم‌ترین مزیت استفاده از این تابع دسترسی همزمان به موقعیت و مقدار عناصر موجود در مجموعه داده است.

بهترین روش برای یادگیری کار با یک تابع در پایتون پیاده‌سازی مثال‌های مختلف با آن است. بر همین اساس بعد از آشنایی با سینتکس تابع enumerate و پارامترهای ورودی آن در این بخش چندین مثال کاربردی و متنوع از کاربردهای این تابع آورده شده است.

تابع enumerate بدون پارامتر start

همان طور که پیش‌تر نیز عنوان شد، تابع enumerate به عنوان ورودی ۲ پارامتر را دریافت می‌کند. پارامتر اول اجباری و یک مجموعه داده است. پارامتر دوم نیز اختیاری است که نقطه شروع پیمایش را مشخص می‌کند. قطعه کد زیر ساده‌ترین شکل پیاده‌سازی تابع enumerate را نشان می‌دهد.

در مثال بالا لیستgrocery به عنوان تنها ورودی تابع enumerate مشخص شده است. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.

[(0, 'bread'), (1, 'milk'), (2, 'butter')]

هر کدام از عناصر موجود در لیستgrocery همراه با موقعیت‌شان در خروجی چاپ شده‌اند. با توجه به عدم تعیین پارامتر start اندیس‌های عناصر از عدد 0 شروع شده‌اند.

تابع enumerate همراه با پارامتر start

در صورت تعیین پارامتر start تابع enumerate شماره اندیس را از مقدار مشخص شده شروع می‌کند. قطعه کد زیر نحوه تعریف تابع enumerate همراه با پارامتر start را نشان می‌دهد.

در مثال بالا پارامتر start برابر عدد10 تعیین شده است. بنابراین، خروجی مورد انتظار به صورت زیر خواهد بود.

[(10, 'bread'), (11, 'milk'), (12, 'butter')]

در نتیجه، با توجه به نیاز می‌توان مقدار پارامتر start در تابع enumerate را تغییر داد.

اعمال حلقه for بر روی یک شی Enumerate

خروجی تابع enumerate یکی شی از نوع enumerate است که برای مشاهده آن باید تبدیل به یک مجموعه داده مانند لیست شود. روش دیگر برای مشاهده خروجی تابع enumerate پیمایش آن با حلقه for است.

تصویری انتزاعی که در آن ۳ عنصر از لیست با توجه موقعیت‌شان در حال پیمایش شدن هستند - تابع enumerate در پایتون

قطعه کد زیر نحوه اعمال حلقه for بر روی یک شی enumerate را نشان می‌دهد.

در مثال بالا لیستgrocery به عنوان ورودی به تابع enumerate ارسال شده است. سپس، حلقه for بر روی خروجی این تابع اعمال شده است. در نهایت، خروجی به صورت زیر خواهد بود.

(0, 'bread')
(1, 'milk')
(2, 'butter')

همچنین، می‌توان عنصر موجود در لیست و موقعیت آن‌ها را به صورت جداگانه پیمایش کرد و در خروجی نمایش داد.

در مثال‌های بالا تابع enumerate یک مرتبه بدون پارامتر start و یک مرتبه همراه با پارامتر start فراخوانی شده است. خروجی قطعه کد بالا نیز به صورت زیر خواهد بود.

0 bread
1 milk
2 butter

100 bread
101 milk
102 butter

دسترسی به عنصر بعدی در شی Enumerate

خروجی تابع enumerate یک شی قابل پیمایش یا همان iterator است. بنابراین، می‌توان از توابع مربوط به iterator برای خروجی این تابع استفاده کرد. تابعnext() یکی از توابع iterator است که در هر مرتبه پیمایش به عنصر بعدی منتقل می‌شود. قطعه کد زیر نحوه دسترسی به عنصر بعدی در شی enumerate با استفاده از تابعnext() را نشان می‌دهد.

خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.

Next Element: (0, 'bread')

پیش‌تر در مطلب زیر از مجله فرادرس مبحث تکرارگرها در پایتون به زبان ساده مورد بررسی قرار گرفته است که در ادامه لینک مربوط به آن آورده شده است.

تابع enumerate با لیستی از تاپل ها

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

در ادامه خروجی قطعه کد بالا آورده شده است.

Index: 0, Quantity: 8, Fruit: Grapes
Index: 1, Quantity: 10, Fruit: Apple
Index: 2, Quantity: 9, Fruit: Banana
Index: 3, Quantity: 12, Fruit: Kiwi

مقایسه تابع enumerate در پایتون با روش های جایگزین

تابع enumerate در عین سادگی ابزار بسیار قدرتمندی در زبان برنامه نویسی پایتون است که امکان دسترسی همزمان به اندیس و مقدار عناصر را هنگام پیمایش یک ساختار قابل تکرار فراهم می‌کند.

با وجود مزایای تابع enumerate در پایتون چندین جایگزین برای آن وجود دارد که در ادامه آورده شده‌اند.

  • شمارنده دستی با متغیر جداگانه
  • استفاده از تابعrange( len() )
  • ترکیب تابعzip باrange

در ادامه این بخش هر کدام از روش‌های جایگزین ارائه شده در بالا برای تابع enumerate مورد بررسی قرار خواهند گرفت.

جایگزین های تابع enumerate در پایتون

استفاده از تابع enumerate

قطعه کد زیر نحوه استفاده از تابع enumerate را نشان می‌دهد.

استفاده از تابع enumerate سادگی، خوانایی و امنیت کد را تضمین می‌کند. همچنین، دیگر نیازی به استفاده از شمارنده یا نوشتن کدهای پیچیده نیست.

شمارنده دستی با متغیر جداگانه

اولین روش جایگزین برای تابع enumerate استفاده از شمارنده دستی با متغیر جداگانه است. قطعه کد زیر نحوه استفاده از شمارنده دستی با متغیر جداگانه را نشان می‌دهد.

در مثال بالا متغیرindex = 0 برای محاسبه مکان هر عنصر در لیستfruits تعریف شده است. این متغیر در هر مرتبه از اجرای حلقه for با دستورindex++ افزایش پیدا می‌کند. معایب این روش خوانایی پایین، کد طولانی و احتمال بروز خطا است.

استفاده از تابع range( len( ) )

روش جایگزین دیگر برای نمایش همزمان اندیس و مقدار عناصر استفاده از تابع range در پایتون برای تولید دنباله‌ای از اعداد است. قطعه کد زیر نحوه استفاده از این تابع را نشان می‌دهد.

خروجی مورد انتظار این قطعه کد نیز به صورت زیر خواهد بود.

0 apple
1 banana
2 cherry

ترکیب تابع zip  با range

تابع zip در پایتون برای ترکیب دو شی قابل پیمایش مورد استفاده قرار می‌گیرد. بنابراین، با ترکیب آن با تابع range می‌توان عملکردی مشابه با تابع enumerate را پیاده‌سازی کرد. قطعه کد زیر مثال مربوط به استفاده از ترکیب تابع zip با range را نشان می‌دهد.

ترکیب تابع zip با range روش جایگزین دیگری برای تابع enumerate است که پیچیدگی بیشتری نسبت به آن ایجاد می‌کند. در مجموع، تابع enumerate در پایتون بهترین گزینه برای پیمایش همزمان اندیس و مقدار است. سایر روش‌های معرفی شده در این بخش برای موارد خاص می‌توانند مورد استفاده قرار گیرند.

کاربردهای عملی تابع enumerate در پایتون چیست؟

تابع enumerate در پایتون راهی ساده برای دسترسی همزمان به اندیس و مقدار عناصر یک مجموعه داده فراهم می‌کند. در ادامه تعدادی از کاربردهای عملی این تابع در پایتون آورده شده است.

  • دسترسی همزمان به اندیس و مقدار هر عنصر
  • تبدیل مستقیم خروجی به لیست یا دیکشنری
  • پیاده‌سازی گزارش‌گیری با پیمایش خطوط فایل
  • ترکیب با توابع دیگر مانندzip وfilter برای ساخت جریان داده خواناتر
  • پیمایش ماتریس و لیست‌های تو‌در‌تو

به صورت خلاصه، استفاده از این تابع موجب کوتاه‌تر شدن کد، افزایش خوانایی و کاهش خطا در برنامه می‌شود.

نمای نزدیک یک چرتکه رنگی - تابع enumerate در پایتون

چرا باید از تابع enumerate در پایتون استفاده کنیم؟

استفاده از تابع enumerate در پایتون مزایای زیادی دارد که افزایش خوانایی کد و بهبود کارایی تنها بخشی از آن است. دلایل دیگری نیز برای استفاده از این تابع وجود دارد که در ادامه آورده شده‌اند.

  • خوانایی بالا
  • ترکیب همزمان اندیس و مقدار
  • پایتونیک بودن
  • امنیت و کاهش خطا
  • سازگاری با انواع داده قابل تکرار
  • کاهش مصرف حافظه

در ادامه به صورت مختصر هر کدام از دلایل ارائه شده در بالا توضیح داده خواهند شد.

دلایل استفاده از تابع enumerate در پایتون

خوانایی بالا

استفاده از تابع enumerate تاثیر زیادی بر خوانایی کد دارد. تابع enumerate در پایتون کد نوشته شده را مختصرتر و واضح‌تر می‌کند. برای درک بهتر این مورد کد زیر را در نظر بگیرید که از تابع enumerate استفاده می‌کند.

حال آن را با کد زیر مقایسه کنید.

هر دو کد ارائه شده در بالا خروجی یکسانی را تولید می‌کنند، ولی کد اول ساده‌تر و قابل فهم‌تر است.

ترکیب همزمان اندیس و مقدار

مهم‌ترین دلیل استفاده از تابع enumerate دسترسی همزمان به اندیس و مقدار عناصر مجموعه داده است که این مورد را بدون نیاز به گرفتن طول لیست یا شمارش دستی امکان‌پذیر می‌کند.

پایتونیک بودن

منظور از پایتونیک بودن یعنی نوشتن کد با استفاده از ساده‌ترین ابزارها که استفاده از تابع enumerate در پایتون این اصل را برآورده می‌کند.

امنیت و کاهش خطا

استفاده از روش‌های جایگزین برای دسترسی همزمان به اندیس و مقدار عناصر به جای تابع enumerate کد را مستعد خطاهای منطقی می‌کند. به عنوان مثال، با استفاده از تابعrange(len(x)) می‌توان عملکردی مشابه با تابع enumerate را پیاده‌سازی کرد، ولی در صورت تغییر لیست برنامه با خطا مواجه خواهد شد. تابع enumerate نه تنها با لیست بلکه با هر شی قابل پیمایش دیگری نیز کار می‌کند و به طول لیست وابسته نیست.

میز کار یک برنامه نویس در شب

سازگاری با انواع داده قابل تکرار

تابع enumerate با مجموعه داده‌های مختلف نظیر لیست، تاپل، دیکشنری و سایر موارد دیگر سازگاری دارد.

کاهش مصرف حافظه

خروجی تابع enumerate یک شی قابل پیمایش یا همان iterator است که در مقایسه با سایر روش‌ها حافظه بسیار کمی مصرف می‎‌کند.

یادگیری پایتون برای بازار کار

پایتون انتخاب بسیار خوبی برای ورود دنیای برنامه نویسی است. این زبان برنامه نویسی با توجه به کاربردهای متعدد خود از بازار کار بسیار خوبی برخوردار است و فرصت‌های شغلی متعددی برای علاقه‌مندان به این زبان وجود دارد. اگر قصد یادگیری پایتون برای ورود به بازار کار را دارید، باید نیازها و مهارت‌های مورد نیاز بازار کار را بشناسید. بنابراین، با توجه به زمینه‌های کاری مختلف پایتون باید در گام نخست حوزه کاری خود را مشخص کنید. سپس، بعد از یادگیری مفاهیم اولیه پایتون پروژه مختلفی را برای خود تعریف کنید.

مجموعه فیلم‌های آموزش پروژه محور برنامه نویسی پایتون (Python) فرادرس
با کلیک بر روی تصویر بالا می‌توانید به صفحه اصلی مجموعه آموزش‌های پروژه محور برنامه نویسی پایتون هدایت شوید.

بهترین روش برای یادگیری پایتون برای بازار کار انجام پروژه‌های مختلف است. پیاده‌سازی پروژه با پایتون به شما کمک می‌کند تا چالش‌های موجود در حین کار را بهتر درک کنید. یکی از گزینه‌های خوب در این زمینه مشاهده فیلم‌های آموزشی پروژه محور است. با توجه به اهمیت این موضوع فرادرس فیلم‌های آموزشی پروژه محور متعددی برای پایتون منتشر کرده است. مشاهده این آموزش‌ها به تثبیت آموخته‌های نظری و تقویت توانایی حل مسئله کمک شایانی می‌کنند. دسترسی به این آموزش‌ها از طریق مجموعه فیلم‌های آموزش پروژه محور برنامه نویسی پایتون در فرادرس امکان‌پذیر است که لینک آن در ادامه آورده شده است.

از جمله فیلم‌های آموزشی موجود در این مجموعه به موارد زیر می‌توان اشاره کرد.

جمع‌بندی

در این مطلب تابع پرکاربرد enumerate در زبان برنامه نویسی پایتون به شکلی ساده همراه با مثال‌های کاربردی مورد بررسی قرار گرفت. این تابع ساده ابزاری قدرتمند برای پیمایش لیست‌ها و سایر ساختارهای قابل تکرار است که به توسعه‌دهندگان امکان می‌دهد تا شماره اندیس هر عنصر را همزمان با مقدار آن دریافت کنند. در صورت استفاده از این تابع دیگر نیازی به تعریف متغیر جداگانه برای شمارش حلقه‌ها نیست و در نتیجه کد نوشته شده به شکل قابل توجهی ساده‌تر و خواناتر خواهد بود.

در این مطلب از مجله فرادرس کاربردهای مختلف تابع enumerate در پایتون توضیح داده شد و نمونه‌هایی عملی از پیاده‌سازی آن در موقعیت‌های مختلف ارائه گردید. به طور کلی، تابع enumerate ابزاری کاربردی در پایتون است که استفاده صحیح از آن می‌تواند کیفیت کد نویسی را ارتقا داده و فرایند توسعه را نیز بهبود بخشد.

source

توسط expressjs.ir