مقدمه

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

پیمایش روی لیست با حلقه for

حلقه‌ی for در پایتون یکی از پرکاربردترین ساختارهای کنترلی است که برای پیمایش (iteration) روی لیست‌ها کاربرد دارد. البته حلقه‌ی for می‌توند روی سایر کالکشن‌‌ها مانند تاپل‌ها (tuples) و رشته‌ها (strings) هم به کار گرفته شود ولی ما در این بخش روی حلقه‌زدن روی لیست‌ها متمرکز هستیم. ساختار کلی حلقه‌ی for در پایتون به این صورت است:

for variable in collection:
  # statements

در اینجا variable یک متغیر است که در هر تکرار به یکی از آیتم‌های لیست اشاره می‌کند و collection هم نام کالکشنی است که می‌خواهیم آن را پیمایش کنیم.

فرض کنید لیستی متشکل از نام چند شعبده‌باز مطرح داریم و قصد داریم این نام‌ها را نمایش دهیم. با وجودی که این کار را می‌توانیم با فراخوانی مجزای تابع print() برای هر آیتم انجام دهیم، اما این کار دو مشکل دارد. اول اینکه اگر تعداد آیتم‌های لیست زیاد باشد، زمان و انرژی زیادی از ما گرفته می‌شود و دوم اینکه اگر تغییری در طول لیست ایجاد شود، باید کدها را ویرایش کنیم. اما حلقه‌ی for هیچ‌یک از این مشکلات را ندارد.

Copy Icon python_lists.py
magicians = ['alice', 'david', 'carolina']
for magician in magicians: 
  print(magician)

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

alice 
david 
carolina

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

سعی کنید نامی که برای متغیر موقت حلقه (در مثال بالا magician) تعیین می‌کنید، نامی بامعنا باشد.

پیمایش روی رشته با حلقه for

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

Copy Icon python_lists.py
text = "Python"
for char in text:
  print(char)

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

P
y
t
h
o
n
          

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

Copy Icon python_lists.py
text = "Python"
reversed_text = ""
for char in text:
  reversed_text = char + reversed_text
print(reversed_text)

نتیجه‌ی اجرای این کد به صورت زیر خواهد بود.

nohtyp

دسترسی به اندیس عناصر با تابع enumerate

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

Copy Icon python_lists.py
text = "Python"
for index, char in enumerate(text):
  print(f"Index: {index}, Character: {char}")

خروجی کد بالا به صورت زیر خواهد بود.

Index: 0, Character: P
Index: 1, Character: y
Index: 2, Character: t
Index: 3, Character: h
Index: 4, Character: o
Index: 5, Character: n