تا %60 تخفیف خرید برای 5 نفر با صدور مدرک فقط تا
00 00 00
در توسینسو تدریس کنید

آموزش پایتون (Python) به زبان خیلی ساده قسمت 16 : Comprehension

در این قسمت از آموزش پایتون راجع به مبحثی صحبت می کنیم به نام Comprehension که به شما این اجازه را می دهد تا با استفاده از یک یا چند حلقه اقدام به ایجاد ساختار های داده مورد نظر خود کنند. این کار بوسیله ترکیب حلقه ها و Condition Test ها انجام می شود که در این قسمت به بررسی روش های مختلف استفاده از تکنیک در زبان پایتون خواهیم پرداخت. برای شروع کد زیر را در نظر بگیرید:

>>> numbers=[]
>>> numbers.append(1)
>>> numbers.append(2)
>>> numbers.append(3)
>>> numbers.append(4)
>>> numbers.append(5)
>>> numbers.append(6)
>>> numbers
[1, 2, 3, 4, 5, 6]

در کد بالا یک لیست ایجاد کردیم که شامل اعداد 1 تا 6 است. یک راه حل خلاصه تر برای اینکار استفاده از حلقه for به صورت زیر است:

>>> numbers=[]
>>> for num in range(1,7):
...     numbers.append(num)
...
>>> numbers
[1, 2, 3, 4, 5, 6]

یا اینکه خروجی تابع range را به صورت مستقیم در تابع list به صورت زیر استفاده کنیم:

>>> numbers=list(range(1,7))
>>> numbers
[1, 2, 3, 4, 5, 6]

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

[expression for item in iterable]

بخش expression عبارتی است که مشخص می کنید هر آیتم لیست چگونه ایجاد شود و بخش مقابل آن یعنی for item in iterable هم یک for ساده است که یک مجموعه قابل شمارش (همان iterable در عبارت بالا) را پیمایش می کند. مثال بالا که یک لیست از اعداد 1 تا 6 را ایجاد می کردیم را با تکنیک Comprehension بازنویسی می کنیم:

>>> numbers = [number for number in range(1,7)]
>>> numbers
[1, 2, 3, 4, 5, 6]

شاید با خودتون بگید که چه کاریه؟ خوب فقط از تابع range استفاده می کنیم! اما مزیت استفاده از این روش این هست که تو بخش expression میشه عملیات های مختلفی بر روی نتیجه هر آیتم لیست انجام داد. برای مثال، کد بالا رو جوری تغییر میدیم که لیست مورد نظر شامل اعداد بین 1 تا 6 باشه، اما هر عدد ضربدر 2:

>>> numbers = [number*2 for number in range(1,7)]
>>> numbers
[2, 4, 6, 8, 10, 12]

علاوه بر این موضوع می توان داخل عبارت های Comprehension از شرط ها نیز استفاده کرد که ساختار آن به صورت زیر است:

[expression for item in iterable if condition]

برای مثال، لیستی ایجاد می کنیم از اعداد زوج بین 1 تا 100:

>>> even_numbers = [number for number in range(1,101) if number % 2 == 0]
>>> event_numbers
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]

اگر میخواستیم کد عبارت بالا را به ترکیب حلقه ها و شرط if بنویسیم باید به صورت زیر اینکار را انجام می دادیم:

>>> even_numbers=[]
>>> for number in range(1,101):
...     if number % 2 == 0:
...         even_numbers.append(number)
...

این تکنیک را علاره بر لیست ها می توان برای ایجاد دیکشنری ها نیز استفاده کرد، برای مثال در کد زیر یک دیکشنری ایجاد کرده و کلید آن یک عدد و مقدار آن حاصل همان عدد ضربدر 2 است:

>>> num_dic = {number: number*2 for number in range(1,11)}
>>> num_dic
{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18, 10: 20}

دقت کنید که برای ایجاد دیکشنری به جای علامت های [] از {} استفاده شده برای نوشتن عبارت Comprehension. برای ایجاد مجموعه ها نیز از علامت های {} استفاده می کنیم، با این تفاوت که در بخش expression فقط یک آیتم مشخص می شود، در حالی که در دیکشنری بوسیله : دو آیتم مشخص می کردیم:

>>> num_set = {number*2 for number in range(1,11)}
>>> num_set
set([2, 4, 6, 8, 10, 12, 14, 16, 18, 20])

شاید فکر کنید که اگر به جای علامت های [] و {} از () استفاده کنیم که tuple برای ما ایجاد می شود، اما اینطور نیست و tuple ها از قابلیت Comprehension پشتیبانی نمی کنند و در صورت استفاده از پرانتز خروجی یک Generator Object است که در قسمت های بعدی در مورد آن ها توضیح خواهیم داد:

>>> num_tuple=(number for number in range(1,11))
>>> num_tuple
 at 0x02AE43F0>

در قسمت بعدی سری آموزشی زبان پایتون با توابع یا Function ها آشنا می شویم. ITpro باشید

نویسنده: حسین احمدی
منبع: جزیره برنامه نویسی وب سایت توسینسو
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است
#ایجاد_دیکشنری_در_پایتون #ایجاد_مجموعه_در_پایتون #تکنیک_comprehension_در_پایتون #ایجاد_لیست_در_پایتون #آموزش_پایتون #آموزش_برنامه_نویسی_پایتون #آموزش_زبان_پایتون
نظر شما
برای ارسال نظر باید وارد شوید.
1 نظر
افرادی که این مطلب را خواندند مطالب زیر را هم خوانده اند