حلقه زدن در کل یک لیست
بیشتر اوقات میخواهید با رجوع به تکتکِ اعضای یک لیست، کاری مشابه را روی هر کدام انجام دهید. برای مثال در یک بازی ممکن است بخواهید که هر عنصر را روی صفحه به یک اندازه تکان دهید یا بر روی اعضای یک لیست عددی محاسبهی آماریِ یکسانی انجام دهید. یا بخواهید سرخطّهای لیستی از مقالهها را روی وبسایتی نمایش دهید. هر گاه بخواهید عملی یکسان را بر روی تمام اعضای یک لیست انجام دهید میتوانید از حلقهی for پایتون بهره بگیرید.
فرض کنید که لیستی از اسامی تعدادی شعبدهباز در اختیار داریم و میخواهیم اسم تمامِ آنها را چاپ کنیم. این کار را میتوان با بازیابیِ جداگانهی هر عضوِ لیست انجام داد ولی این رویکرد چند مشکل ایجاد میکند. یکی این که ممکن است در لیستهای طولانی تکراری به نظر برسد. جز این، ما مجبوریم با هر بار تغییر یافتنِ طول لیست کد خود را تغییر دهیم. حلقهی for هر دو مشکل را با سپردن مدیریت این کار به صورت داخلی به پایتون برطرف میکند.
اکنون از حلقهی for برای چاپ کردن تکتک نامها در لیست شعبدهبازها استفاده میکنیم:
در خط ۱ همانند کاری که در فصل سوم کردیم، از تعریف یک لیست شروع میکنیم. در خط ۲ یک حلقهی for تعریف میکنیم. این خط از پایتون میخواهد تا یک نام را از لیست magicians بیرون کشیده و آن را به متغیّر magician نسبت دهد. در خط ۳ به پایتون میگوییم که نامی را که هماکنون به magician نسبت داده چاپ کند. پایتون سپس خطهای ۲ و ۳ را برای تمام نامهای داخل لیست تکرار میکند. شاید خواندن این کد به این صورت برای شما سودمند باشد: «برای هر شعبدهباز در لیست شعبدهبازها، نام شعبدهباز را چاپ کن.» در خروجی به سادگی چاپ شدن هر نام موجود در لیست را خواهیم دید:
نگاهی نزدیکتر به حلقهزدن
مفهوم حلقه زدن بسیار مهم است زیرا یکی از معمولترین راهها برای خودکارسازی وظایف تکراری با رایانه است. به عنوان یک مثال در حلقهی سادهای که در magicians.py به کار بردیم، پایتون ابتدا اوّلین خط حلقه را میخواند:
|
|
این خط به پایتون میگوید که اوّلین مقدار را از لیست magicians بیرون بکشد و آن را به متغیّر magician نسبت بدهد. اوّلین مقدار ‘alice’ است. پایتون سپس خط بعدی را میخواند:
|
|
پایتون مقدار فعلی magician را که همچنان ‘alice’ است چاپ میکند. از آنجایی که لیست مقادیر دیگری را نیز دربرمیگیرد، پایتون به اوّلین خط حلقه بازمیگردد:
|
|
پایتون نام بعدی را از لیست میخواند و مقدار آن را به متغیّر magician منسوب میکند و سپس همان خط را اجرا میکند:
|
|
پایتون بار دیگر مقدار magician را چاپ میکند که الان ‘david’ است و بار دیگر کل حلقه را تا فرارسیدنِ آخرین مقدارِ درون لیست، ‘carolina’، تکرار میکند. چون مقدار دیگری در لیست وجود ندارد پایتون به خط بعد از حلقه میرود. در این مورد چون بعد از حلقهی for چیزی وجود ندارد برنامه به سادگی پایان مییابد.
هنگامی که برای نخستین بار از حلقهها استفاده میکنید به خاطر داشته باشید که مجموعهای از گامها و مراحل برای تکتک اعضای لیست یکبار تکرار میشود و تعداد اعضای لیست مهم نیست. اگر یک میلیون مورد در لیست شما باشد پایتون تمام این مراحل را یک میلیون بار تکرار میکند، که معمولاً سریع هم انجام میگیرد.
همچنین بدانید که هنگام نوشتن حلقههای for، برای متغیّر موقّت حلقه که هر مقدارِ درون لیست به آن منسوب میشود، میتوانید هر اسم دلخواهی را انتخاب کنید. با این حال انتخاب کردن نامی معنادار که بیانگر یک عضو لیست باشد سودمند است. برای مثال راه مناسب برای نوشتن یک حلقهی for برای لیست گربهها، سگها و یک لیست عمومی از اقلام در اینجا میآید:
این قراردادها در نامگذاری به شما کمک میکند تا اتّفاقاتی را که در داخل حلقهی for برای هر عضو آن میافتد دنبال کنید. بهکارگیری اسمهای مفرد و جمع کمک میکند که بفهمید یک بخش کد روی یک عضو لیست کار میکند یا تمام آن.