


آموزش حلقه for در پایتون
وقتی با داده ها در پایتون کار می کنید، حلقه های for می تواند ابزار قدرتمندی باشد.
وقتی با داده ها در پایتون کار می کنید، حلقه های for می تواند ابزار قدرتمندی باشد. اما زمانی که تازه شروع به کار می کنید، ممکن است کمی گیج کننده باشند. در آموزش حلقه for در پایتون، ما ابتدا به سراغ حلقهها میرویم و یاد میگیریم که چگونه میتوان از آنها برای انجام انواع کارها در زمان و تعداد مشخص یا تجزیه و تحلیل دادهها در پایتون، استفاده کرد.
نکته مهم : این آموزش برای کسانی هست که با مفاهیم اولیه پایتون آشنایی دارند در صورتی که هیچ آشنایی با زبان پایتون ندارید ، می توانید آموزش پایتون از تیم آکادمی آی تی را مشاهده کنید.
حلقه های For چیست؟
در علم داده، از حلقههای Python برای یک شیء تکرارپذیر (مانند لیست، مجموعه، و غیره) استفاده میشود و برای هر ورودی همان عمل را انجام میدهد. به عنوان مثال، یک حلقه for به ما اجازه می دهد تا از طریق یک لیست تکرار کنیم، و همان عمل را روی هر آیتم مدنظر در لیست، انجام دهیم.
به هر حال، یک شیء قابل تعامل، هر شیء است که میتوانیم از طریق آن، تکرار کنیم یا از طریق آن حلقه ایجاد کنیم؛ و یک عنصر را در هر زمانی که بخواهیم برگردانیم. برای مثال، فهرستها، قابل تکرار هستند و هر بار یک ورودی فهرست را برمیگردانند؛ همچنین رشتهها نیز تکرارپذیر هستند و هر بار یک کاراکتر را به ترتیب ظاهر شدن کاراکترها، برمیگردانند.
برای ایجاد یک حلقه for، ابتدا شیء تکرارپذیری را که میخواهیم از طریق آن حلقه را ایجاد کنیم و همچنین اقداماتی را که باید روی هر مورد در آن شیء تکرارپذیر، انجام دهیم؛ تعریف می کنیم. به عنوان مثال، هنگام تکرار از طریق یک لیست، ابتدا فهرستی را که میخواهیم تکرار شود، مشخص میکنیم و سپس مشخص میکنیم که میخواهیم روی هر مورد از فهرست ها چه کاری انجام شود.
بیایید به یک مثال سریع نگاه کنیم: اگر لیستی از نامها، در پایتون ذخیره شده باشد؛ میتوانیم از یک حلقه for برای تکرار در آن لیست استفاده کنیم و هر نام را تا زمانی که به پایان برسد، نمایش دهیم. در مثال زیر، فهرست نامهای خود را ایجاد میکنیم، و سپس یک حلقه for مینویسیم که از طریق آن تکرار میشود، و هر ورودی را در لیست به ترتیب نمایش می دهیم.
our_list = ['Alireza', 'Hadi', 'Fatima', 'Zahra'] for name in our_list: print(name)
با متد print آیتم های مد نظر به صورت خروجی نمایش داده می شوند.
Alireza Hadi Fatima Zahra
این کد در این حلقه ساده یک سوال را ایجاد می کند: نام متغیر از کجا آمده است؟ ما قبلاً آن را در کد خود تعریف نکرده ایم! اما از آنجایی که حلقهها از طریق لیستها، به ترتیب تکرار میشوند؛ این متغیر را میتوان تقریباً هر چیزی نامید. پایتون هر نام متغیری را که در آن نقطه قرار میدهیم، متوجه شده و تفسیر میکند. و این قدرت زبان برنامه نویسی پایتون است.
بنابراین، در کد بالا:
نام در اولین تکرار حلقه به "علیرضا" اشاره می کند. سپس «هادی» در تکرار دوم حلقه و بقیه هم به همین ترتیب. صرف نظر از اینکه ما آن متغیر را چه می نامیم، نتیجه همین خروجی خواهد بود. بنابراین اگر، برای مثال، کد بالا را بازنویسی کنیم تا نام را با x جایگزین کنیم، دقیقاً دوباره همان نتیجه را خواهیم گرفت:
for x in our_list: print(x)
خروجی:
Alireza Hadi Fatima Zahra
توجه داشته باشید که این تکنیک با هر شیء قابل تکرار کار می کند. به عنوان مثال، رشته ها قابل تکرار هستند، و ما می توانیم از همان حلقه for برای تکرار در هر کاراکتر در یک رشته نیز استفاده کنیم:
for letter in 'Lily': print(letter)
خروجی:
A l i r e z a
استفاده از حلقه های For در لیست ها
در کار تجزیه و تحلیل واقعی داده ها، بعید است که ما با لیست های کوتاه و ساده مانند مثال بالا کار کنیم. به طور کلی، ما با مجموعه ای از داده ها در قالب جدول، با چندین ردیف و ستون کار می کنیم؛ که این نوع دادهها را میتوان در پایتون بهعنوان فهرستی ذخیره کرد، و سپس از حلقهها برای تکرار آن ها استفاده کنیم.
برای یادگیری نحوه انجام این کار، اجازه دهید نگاهی به یک سناریوی واقعیتر بیندازیم و این جدول دادههای کوچک را که حاوی قیمتهای خودرو به دلار و تخمین محدوده EPA (سازمان محیط زیست) برای چندین خودروی الکتریکی، بررسی کنیم.
خودرو | محدوده | قیمت |
Tesla Model 3 LR | 310 | 49900 |
Hyundai Ioniq EV | 124 | 30315 |
Chevy Bolt | 238 | 36620 |
ما میتوانیم همین مجموعه داده را به صورت فهرستی نمایش دهیم، مانند:
ev_data = [['vehicle', 'range', 'price'], ['Tesla Model 3 LR', '310', '49900'], ['Hyundai Ioniq EV', '124', '30315'], ['Chevy Bolt', '238', '36620']]
ممکن است متوجه شده باشید که در لیست بالا، اعداد مربوط به محدوده و قیمت ها در واقع بهجای اعداد صحیح بهعنوان رشتهها ذخیره شده اند. ما می توانیم دادهها را به این روش ذخیره کنیم؛ اما برای تجزیه و تحلیل، باید آن رشتهها را به اعداد صحیح تبدیل کنیم تا بتوانیم محاسباتی را با آن ها انجام دهیم. بیایید از یک حلقه for برای تعامل در لیست خود استفاده کنیم، ورودی قیمت را در هر لیست انتخاب کرده و آن را از یک رشته به یک عدد صحیح تغییر دهیم.
برای انجام این کارنباید از ردیف اول استفاده کنیم، زیرا آن ها نام ستون ها هستند و اگر بخواهیم یک رشته غیر عددی مانند 'محدوده' را به یک عدد صحیح تبدیل کنیم، با خطا مواجه خواهیم شد. ما می توانیم این کار را با استفاده از برش لیست انجام دهیم تا هر سطر بعد از سطر اول با استفاده از ev_data[1:] انتخاب شود.
سپس، فهرست لیستها را مرور میکنیم و برای هر حلقه تکرار، عنصری را در ستون محدوده، که دومین ستون جدول ما است، انتخاب میکنیم. ما مقدار یافت شده در این ستون را به متغیری به نام "range" اختصاص می دهیم. برای انجام این کار، از شاخص شماره 1 استفاده می کنیم (در پایتون، اولین ورودی در یک شاخص 0، ورودی دوم در شاخص 1 و همینطور اضافه می شود).
در نهایت، اعداد محدوده را با استفاده از تابع int() به اعداد صحیح تبدیل می کنیم و رشته های اصلی را با این اعداد صحیح در مجموعه داده خود جایگزین می کنیم.
for row in ev_data[1:]: # loop through each row in ev_data starting with row 2 (index 1) ev_range = row[1] # each car's range is found in column 2 (index 1) ev_range = int(ev_range) # convert each range number from a string to an integer row[1] = ev_range # assign range, which is now an integer, back to index 1 in each row print(ev_data)
خروجی:
[['vehicle', 'range', 'price'], ['Tesla Model 3 LR', 310, '49900'], ['Hyundai Ioniq EV', 124, '30315'], ['Chevy Bolt', 238, '36620']]
اکنون که آن مقادیر را به صورت اعداد صحیح ذخیره کردهایم، میتوانیم از حلقه for برای انجام برخی محاسبات نیز استفاده کنیم. برای مثال، فرض کنید که میخواهیم میانگین range را در این لیست مشخص کنیم. ما باید اعداد برد را با هم جمع کنیم و سپس آنها را بر تعداد کل خودروهای موجود در لیست خود تقسیم کنیم.
باز هم، میتوانیم از یک حلقه for برای انتخاب ستون خاصی که در مجموعه دادههایمان نیاز داریم استفاده کنیم. ما با ایجاد متغیری به نام total_range شروع می کنیم که در آن می توانیم مجموع محدوده ها را ذخیره کنیم. سپس یک حلقه for دیگر می نویسیم، دوباره از ردیف سرصفحه، پرش می کنیم؛ و دوباره ستون دوم (شاخص 1) را به عنوان مقدار محدوده شناسایی می کنیم.
پس از آن، تنها کاری که باید انجام دهیم این است که این مقدار را به total_range در حلقه for خود اضافه کنیم و سپس مقدار را با استفاده از total_range تقسیم بر تعداد اتومبیلها پس از تکمیل حلقه محاسبه کنیم.
(توجه داشته باشید که ما تعداد خودروها را با شمارش طول لیست خود، منهای ردیف سرصفحه، در کد زیر محاسبه می کنیم. بنابراین به سادگی بر 3 تقسیم می کنیم، اما اگر اطلاعات خودروی دیگری به لیست اضافه شود، محاسبات ما را خراب می کند. بنابراین میتوانیم این کد را دوباره اجرا کنیم و همچنان پاسخ صحیح را دریافت کنیم.)
total_range = 0 # create a variable to store the total range number for row in ev_data[1:]: # loop through each row in ev_data starting with row 2 (index 1) ev_range = row[1] # each car's range is found in column 2 (index 1) total_range += ev_range # add this number to the number stored in total_range number_of_cars = len(ev_data[1:]) # calculate the length of our list, minus the header row print(total_range / number_of_cars) # print the average range
خروجی:
224.0
حلقهها در پایتون بسیار قدرتمند هستند و میتوانیم دستورالعملهای پیچیدهتری را در داخل آن ها قرار دهیم. برای نشان دادن این موضوع، اجازه دهید در مثال بالا، برای ستون «قیمت» خودرو، این بار به وسیله حلقه For انجام دهیم.
total_price = 0 # create a variable to store the total range number for row in ev_data[1:]: # loop through each row in ev_data starting with row 2 (index 1) price = row[2] # each car's price is found in column 3 (index 2) price = int(price) # convert each price number from a string to an integer row[2] = price # assign price, which is now an integer, back to index 2 in each row total_price += price # add each car's price to total_price number_of_cars = len(ev_data[1:]) # calculate the length of our list, minus the header row print(total_price / number_of_cars) # print the average price
خروجی:
38945.0
ما همچنین میتوانیم عناصر دیگری مانند عبارات If Else و حتی حلقههای دیگر را در داخل حلقههای for قرار دهیم. برای مثال، تصور کنید ما میخواهیم هر خودرویی را با محدوده بیش از 200 در لیست خود پیدا کنیم. سپس، از یک حلقه for برای تکرار از طریق ev_data استفاده میکنیم.
long_range_car_list = [] # creating a new list to store our long range car data for row in ev_data[1:]: # iterate through ev_data, skipping the header row ev_range = row[1] # assign the range number, which is at index 1 in the row, to the range variable if ev_range > 200: # append the whole row to long-range list if range is higher than 200 long_range_car_list.append(row) print(long_range_car_list)
خروجی:
[['Tesla Model 3 LR', 310, 49900], ['Chevy Bolt', 238, 36620]]
البته انجام این عملیات با مجموعه داده های کوچک، بسیار ساده و حتی با دست هم قابل محاسبه است. اما همین تکنیکها روی مجموعههای دادهای با هزاران ردیف هم، به درستی کار میکند؛ و مرتبسازی و تجزیه و تحلیل مجموعههای داده ای عظیم را به یک چشم بر هم زدن انجام می دهد.
تکنیک های Range، Break وContinue
فقط با تسلط بر تکنیک های توضیح داده شده در بالا، می توانید کارهای شگفت انگیزی را با حلقه های for انجام دهید، اما بیایید کمی عمیق تر به موضوع نگاه کنیم و چند چیز دیگر را یاد بگیریم که ممکن است مفید باشد، حتی اگر از آن ها کمتر در زمینه داده استفاده کنید.
Range
در پایتون حلقههای For را میتوان همراه با تابع ()range، برای تکرار در هر عدد در یک محدوده مشخص استفاده کرد. مثلا:
for x in range(5, 9): print(x)
خروجی:
5 6 7 8
توجه داشته باشید که پایتون، حداکثر مقدار یک محدوده را در شمارش محدوده درج نمی کند، به همین دلیل است که عدد 9 در بالا ظاهر نمی شود. اگر میخواهیم این کد از 5 تا 9 شامل 9 باشد، باید محدوده (9، 5) را به محدوده (10، 5) تغییر دهیم:
for x in range(5, 10): print(x)
خروجی:
5 6 7 8 9
اگر فقط یک عدد را در تابع ()range خود مشخص کنید، پایتون آن را به عنوان حداکثر مقدار در نظر می گیرد و یک مقدار حداقل پیش فرض صفر را اختصاص می دهد:
for x in range(3): print(x)
خروجی:
0 1 2
حتی میتوانید آرگومان سومی را به تابع ()range اضافه کنید تا مشخص کنید که میخواهید اعداد چندتا چندتا اضافه شوند. همانطور که در بالا می بینید، مقدار پیش فرض 1 است، اما برای مثال، اگر آرگومان سوم 3 را اضافه کنید، می توانید از ()range با حلقه for برای شمارش سه تایی استفاده کنید:
for x in range(0, 9, 3): print(x)
خروجی:
0 3 6
Break
به طور پیشفرض، یک حلقه Python برای هر تکرار ممکن از شیء قابل تعاملی که به آن اختصاص دادهاید، استفاده کند. معمولاً وقتی از یک حلقه for استفاده میکنیم، میخواهیم همان عمل را روی هر آیتم در لیست خود انجام دهیم.
با این حال، گاهی اوقات ممکن است بخواهیم در صورت رعایت یک شرط خاص، حلقه را متوقف کنیم. در آن شرایط، از دستور break استفاده می کنیم. هنگامی که با دستور if در داخل یک حلقه، for استفاده می شود، break به ما اجازه می دهد؛ تا قبل از نتیجه گیری از آن حلقه، خارج شویم.
بیایید ابتدا به یک مثال سریع نگاهی بیندازیم، با استفاده از لیستی از نام هایی که قبلا ایجاد کردیم our_list:
for name in our_list: break print(name)
وقتی این کد را اجرا می کنیم چیزی نمایش داده نمی شود. دلیلش این است که دستور break قبل از print(name) در حلقه for ما آمده است. وقتی پایتون break را میبیند، اجرای حلقه for را متوقف میکند و کدی که پس از break در حلقه ظاهر میشود، اجرا نمیشود.
بیایید یک عبارت if را به این حلقه اضافه کنیم تا وقتی پایتون به نام Zahra رسید، از حلقه خارج شویم:
for name in our_list: if name == 'Zahra': break print(name)
خروجی:
Alireza Hadi Fatima
در اینجا، می بینیم که نام زهرا چاپ نشده است. اما چیزی که با هر تکرار حلقه اتفاق می افتد چگونه است:
پایتون چک میکند تا ببیند نام اول «Zahra» است یا خیر. اینطور نیست، بنابراین به اجرای کد زیر دستور if ما ادامه می دهد و نام کوچک را چاپ می کند.
پایتون بررسی می کند که آیا نام دوم «Zahra» است یا خیر. اینطور نیست، بنابراین به اجرای کد زیر دستور if ما ادامه می دهد و نام دوم را چاپ می کند.
پایتون بررسی می کند که آیا نام سوم «Zahra» است یا خیر. اینطور نیست، بنابراین به اجرای کد زیر دستور if ما ادامه می دهد و نام سوم را چاپ می کند.
پایتون بررسی می کند که آیا نام چهارم «Zahra» است یا خیر. است، بنابراین break اجرا می شود و حلقه for به پایان می رسد.
بیایید به کدی که برای جمعآوری اطلاعات خودروهای برقی دوربرد نوشتیم برگردیم و یک مثال دیگر را بررسی کنیم. یک عبارت break وارد میکنیم که به محض برخورد با رشته «تسلا»، کد را متوقف میکند:
long_range_car_list = [] # creating our empty long-range car list again for row in ev_data[1:]: # iterate through ev_data as before looking for cars with a range > 200 ev_range = row[1] if ev_range > 200: long_range_car_list.append(row) if 'Tesla' in row[0]: # but if 'Tesla' appears in the vehicle column, end the loop break print(long_range_car_list)
خروجی:
[['Tesla Model 3 LR', 310, 49900]]
در کد بالا، میتوانیم ببینیم که تسلا همچنان به long_range_car_list اضافه شده است، زیرا ما آن را قبل از دستور if که در آن از break استفاده کردهایم به آن لیست اضافه کردهایم. Chevy Bolt به لیست ما اضافه نشد، زیرا اگرچه محدوده آن بیش از 200 است، قبل از اینکه پایتون به ردیف Chevy Bolt برسد، break به حلقه پایان می دهد.
(به یاد داشته باشید، حلقه ها به ترتیب اجرا می¬شوند. اگر Bolt قبل از Tesla در مجموعه داده های اصلی ما فهرست شده بود، در لیست long_range_car_list قرار می گرفت).
Continue
هنگامی که در یک شیء تکرارشونده مانند یک لیست حلقه را ایجاد می کنیم، ممکن است با موقعیت هایی نیز مواجه شویم که بخواهیم از یک ردیف یا ردیف خاصی بگذریم. برای موقعیتهای سادهای مانند پرش از یک ردیف سرصفحه، میتوانیم از برش فهرست استفاده کنیم، اما اگر بخواهیم ردیفها را بر اساس شرایط پیچیدهتر رد کنیم، میتوانیم از دستور continue برای رد شدن از یک حلقه for استفاده کنیم و به ردیف بعدی برویم.
برای مثال وقتی پایتون در حین اجرای یک حلقه for در لیست، continue را مییابد، در آن نقطه متوقف میشود و به آیتم بعدی در لیست میرود. هر کدی که زیر continue باشد اجرا نمی شود.
بیایید به لیست نامهای خود (our_names) برگردیم و اگر نام «Hadi» باشد، از عبارت «if» برای پایان دادن به تکرار حلقه استفاده می کنیم:
for name in our_list: if name == 'Hadi': continue print(name)
خروجی:
Alireza Fatima Zahra
در بالا، میتوانیم ببینیم که نام هادی نادیده گرفته شده است و بقیه نامهای فهرست ما، به ترتیب چاپ شدهاند. این تفاوت بین break و continue را به طور خلاصه نشان می دهد:
break به طور کامل حلقه را به پایان می رساند. وقتی پایتون break را اجرا می کند، حلقه for تمام می شود. اما continue یک تکرار مشخص از حلقه را پایان می دهد و به آیتم بعدی در لیست می رود. هنگامی که پایتون اجرا میشود، بلافاصله به تکرار حلقه بعدی میرود، اما حلقه را به طور کامل پایان نمیدهد.
برای تمرین بیشتر با continue، بیایید از لیست خودروهای برقی کوتاه برد استفاده کنیم:
short_range_car_list = [] # creating our empty short-range car list for row in ev_data[1:]: # iterate through ev_data as before ev_range = row[1] if ev_range > 200: # if the car has a range of > 200 continue # end the loop here; do not execute the code below, continue to the next row short_range_car_list.append(row) # append the row to our short-range car list print(short_range_car_list)
خروجی:
[['Hyundai Ioniq EV', 124, 30315]]
در اولین حلقه خود، پایتون به ردیف Tesla نگاه می کند. این خودرو برد EV بیش از 200 دارد، بنابراین پایتون دستور if را درست میبیند و continue دستور if را اجرا میکند که باعث میشود بلافاصله به ردیف بعدی ev_data بپرد تا حلقه بعدی خود را شروع کند.
در حلقه دوم پایتون به ردیف بعدی که ردیف Hyundai است نگاه می کند. برد آن خودرو کمتر از 200 است، بنابراین پایتون می بیند که دستور شرطی if برقرار نیست؛ و بقیه کد را در حلقه for اجرا می کند و ردیف Hyundai را به short_range_car_list اضافه می کند.
در حلقه سوم و آخر، پایتون به ردیف Chevy نگاه می کند. برد آن خودرو بیش از 200 است، که به این معنی است که عبارت شرطی if درست است. بنابراین، پایتون یک بار دیگر ادامه کد را اجرا میکند و حلقه را به پایان میرساند؛ و از آنجایی که هیچ ردیفی از داده در مجموعه دادههای ما وجود ندارد، حلقه for را به طور کامل پایان میدهد.
خلاصه
امیدواریم آموزش حلقه for در پایتون،مورد توجه شما قرار گرفته باشد. در این آموزش، با حلقهها در پایتون به خصوص حلقه for آشنا شدید و کاربرد این حلقه پرکاربرد را آموختید، همچنین چگونگی آمادهسازی و تجزیه و تحلیل دادهها را با استفاده از حلقه for با ذکر مثال در هر بخش Ring، Break وContinue به صورت عملی نمایش دادیم. به یاد داشته باشید برای حرفه ای تر شدن فقط باید یه کار انجام دهید و آن چیزی نیست جز "تمرین" با آرزوی موفقیت، و حلقه شاد!