ترفندهای کاربرد حلقه در پایتون | به زبان ساده
حلقههای For احتمالاً یکی از نخستین مفاهیمی هستند که یک برنامهنویس تازهکار پایتون باید بیاموزد. دلیل این امر آن است که حلقههای for میتوانند به انجام بسیاری از کارها روی دادهها کمک کنند و موجب ایجاد دردسر نیز نمیشوند. با این حال در اغلب موارد میبینیم که ذهن افراد در دنیای فرایندهای ساده تکراری قفل میشود و از مزیت برخی روشهای کارآمدتر و منسجمتر برای اجرای فرایندهای تکراری که میتوان روی حلقهها به کار گرفت غافل میماند. استفاده از این ترفندهای کاربرد حلقه در پایتون نه تنها موجب اجرای سریعتر حلقهها میشود، بلکه باعث ایجاد انسجام در کد شده و فرصتهای جدیدی در زمینه کاربرد حلقهها در پایتون فراهم میسازد.
Zip برای چرخش همزمان روی دو لیست
یکی از ابزارهایی که بسیار مفید است، امکان چرخش همزمان روی دو آرایه است. اجرای این کار در زبانهای دیگر بسیار دشوار است، اما در پایتون به سهولت انجام مییابد.
برای چرخش همزمان روی دو آرایه باید صرفاً از متد zip() استفاده کنیم.
نمونه خوبی از نمایش این موضوع در مواردی است که یک لیست از اعداد زوج و یک لیست از اعداد فرد داریم:
خروجی مثال فوق به صورت زیر است:
1 2 3 4 5 6 7 8 9 10
In Range برای نوشتن حلقههای شبیه زبان C
با این که زبان C ممکن است ابتدایی به نظر برسد، اما کارهای جالب زیادی با حلقههای به سبک زبان C میتوان انجام داد.
افرادی که با زبان C آشنایی دارند، شاید استدلال کنند که این حلقه شباهت زیادی به حلقههای C ندارد، اما این شبیهترین حلقهای است که بدون نوشتن یک متد سفارشی تکرار میتوان به دست آورد. در ادامه یک متد جدید برای تکرار مینویسیم تا این حلقه را تا حد امکان به حلقههای زبان C نزدیک کنیم:
()Enumerate برای اندیس کردن ابعاد
متد Enumerate در پایتون موجب میشود بتوانیم اندیسهای لیست را به صورتی که از آرایه به دست میآیند، شمارهگذاری کنیم. برای نشان دادن این موضوع یک مثال از لیست سه عنصری ارائه میکنیم:
اکنون میتوانید به صورت زیر به اندیسهای آرایه دسترسی پیدا کنید:
l[1] 10 l[0] 5 l[2] 15
در زمانی که روی این لیستها «شمارش» (Enumerate) میکنید، موقعیت اندیس ابعاد به دست میآید و ابعاد به صورت یک متغیر جدید ذخیره میشود. به نوع متغیر جدید توجه کنید:
پایتون به صورت خودکار این اندیسها را در یک چندتایی قرار میدهد. این کار عجیب به نظر میرسد و شاید بهتر بود که نتایج در یک دیکشنری یک عنصری پایتون ارائه میشد. خوشبختانه همواره میتوان این Enumerate را به یک دیکشنری پایتون تبدیل کرد. روش کار با استفاده از type assertion به صورت زیر است:
که نتیجه زیر را به دست میدهد:
>>> data {0: 5, 1: 10, 2: 15}
()Sorted برای مرتبسازی دادهها
متد sort یک متد ضروری برای کار با حجم بالایی از دادهها محسوب میشود. این کاری است که دانشمندان علوم داده همواره انجام میدهند. مرتبسازی مطابق انتظار ما کار میکند و رشتهها با ترتیب الفبایی مرتب میشوند. اعداد صحیح و اعشاری نیز از ∞- به سمت بالا مرتبسازی میشوند. نکته مهمی که باید در مورد این تابع اشاره کنیم، این است که با لیستهای شامل رشتهها و اعداد صحیح یا اعشاری کار نمیکند.
با تعیین پارامتر reverse به صورت true میتوانیم مرتبسازی را به صورت معکوس نیز اجرا کنیم:
همچنین میتوانیم از یک کلید به عنوان پارامتر آخر استفاده کنیم. این کلید تابعی است که روی هر بُعد درون یک حلقه مفروض اعمال میشود. به این منظور میتوانیم از لامبدا استفاده کنیم که یک تابع بینام، اما قابل فراخوانی ایجاد میکند.
()Filter برای چرخش روی دادههای خاص
تابعی که قطعاً به افزایش عملکرد در زمان کار با دادهها کمک میکند، تابع filter است. تابع filter دقیقاً همانطور که از نامش برمیآید، دادهها را پیش از ورود به حلقه فیلتر میکند. این وضعیت در مواردی مفید است که میخواهیم روی دادهها در یک بازه خاص تأثیر بگذاریم و قصد نداریم شرطی را روی دادهها اعمال کنیم.
سخن پایانی
به طور معمول با بهکارگیری ترفندهای کاربرد حلقه در زبان پایتون میتوانید کدی منسجمتر و سریعتر بنویسید. با بهرهگیری از مزیت این متدها میتوانید اجرای فرایندهای تکراری را بهبود بخشید و کار با حجم بالایی از دادهها را که در اغلب موارد امری اجتنابناپذیر است، آسانتر کنید.