
Python به دلیل این امکان که به شما اجازه می دهد کدی را بنویسید زیبا ، آسان برای نوشتن و تقریباً آسان به عنوان انگلیسی ساده است. یکی از متمایزترین ویژگی های زبان ، درک لیست است که می توانید برای ایجاد قابلیت های قدرتمند در یک خط کد واحد استفاده کنید. با این حال ، بسیاری از توسعه دهندگان تلاش می کنند تا از ویژگی های پیشرفته تر درک لیست در پایتون به طور کامل استفاده کنند. برخی از برنامه نویسان حتی از آنها بیش از حد استفاده می کنند ، که می تواند منجر به کدی شود که خواندن آن کمتر کارآمد و سخت تر باشد.
با پایان این آموزش ، قدرت کامل درک لیست پایتون و نحوه استفاده راحت از ویژگی های آنها را درک خواهید کرد. شما همچنین می توانید از مبادله ای که با استفاده از آنها استفاده می شود ، درک کنید تا بتوانید مشخص کنید که چه رویکردهای دیگر ارجح تر هستند.
در این آموزش ، شما می آموزید که چگونه:
- حلقه ها و نقشه ها را به عنوان درک لیست در پایتون بازنویسی کنید
- بین مکالمات ، حلقه ها و نقشه ها () تماس بگیرید
- درک مطلب خود را با منطق شرطی شارژ کنید
- برای جایگزینی فیلتر از درک مطلب استفاده کنید
- برای حل سوالات عملکرد کد خود را مشخص کنید
بارگیری رایگان: یک فصل نمونه از Python Tricks دریافت کنید: کتابی که بهترین شیوه های پایتون را با نمونه های ساده ای که می توانید فوراً برای نوشتن کد زیبای + پایتونیک به شما نشان می دهد ، نشان دهید.
نحوه ایجاد لیست در پایتون
چند روش مختلف وجود دارد که می توانید لیست هایی را در پایتون ایجاد کنید. برای درک بهتر تجارت استفاده از یک درک لیست در پایتون ، ابتدا می بینیم که چگونه می توان لیست هایی را با این رویکردها ایجاد کرد.
استفاده برای حلقه ها
رایج ترین نوع حلقه برای حلقه است. برای ایجاد لیستی از عناصر در سه مرحله می توانید از یک حلقه برای حلقه استفاده کنید:
- یک لیست خالی را فوری کنید.
- حلقه بیش از یک عناصر قابل تکرار یا طیف وسیعی.
- هر عنصر را به انتهای لیست اضافه کنید.
اگر می خواهید لیستی حاوی ده مربع کامل اول ایجاد کنید ، می توانید این مراحل را در سه خط کد انجام دهید:
>>> مربع = [] >>> برای i in دامنه(10): . مربع.ضمیمه کردن(i * i) >>> مربع [0 ، 1 ، 4 ، 9 ، 16 ، 25 ، 36 ، 49 ، 64 ، 81]
در اینجا ، شما یک لیست خالی ، مربع ها را فوری می کنید. سپس ، از یک حلقه برای تکرار بیش از محدوده استفاده می کنید (10). سرانجام ، شما هر شماره را به خودی خود ضرب می کنید و نتیجه را تا پایان لیست اضافه می کنید.
با استفاده از اشیاء نقشه ()
MAP () یک روش جایگزین را ارائه می دهد که در برنامه نویسی عملکردی مستقر است. شما در یک تابع عبور می کنید و یک تکرار پذیر ، و نقشه () یک شی ایجاد می کند. این شی حاوی خروجی است که از اجرای هر عنصر قابل تکرار از طریق عملکرد تهیه شده دریافت می کنید.
به عنوان نمونه ، وضعیتی را در نظر بگیرید که در آن باید قیمت پس از مالیات را برای لیستی از معاملات محاسبه کنید:
>>> txns = [1. 09, 23. 56, 57. 84, 4. 56, 6. 78] >>> نرخ مالیات = . 08 >>> دنباله get_price_with_tax(TXN): . برگشت TXN * (1 + نرخ مالیات) >>> نهایی_پریس = نقشه(get_price_with_tax, txns) >>> لیست(نهایی_پریس) [1. 1772000000000002 ، 25. 4448 ، 62. 4672000000005 ، 4. 9248 ، 7. 322400000000001]
در اینجا ، شما یک TXN های قابل اعتماد و یک تابع get_price_with_tax () دارید. شما هر دو آرگومان را به نقشه () منتقل می کنید و شیء حاصل را در نهایی_پریس ذخیره می کنید. می توانید به راحتی این شیء نقشه را با استفاده از لیست () تبدیل کنید.
با استفاده از درک لیست
لیست درک لیست سومین روش ساخت لیست است. با این رویکرد ظریف ، می توانید حلقه For For را از اولین مثال فقط در یک خط کد واحد بازنویسی کنید:
>>> مربع = [i * i برای i in دامنه(10)] >>> مربع [0 ، 1 ، 4 ، 9 ، 16 ، 25 ، 36 ، 49 ، 64 ، 81]
به جای ایجاد یک لیست خالی و اضافه کردن هر عنصر به انتها ، شما به سادگی با دنبال کردن این قالب ، لیست و محتوای آن را همزمان تعریف می کنید:
new_list = [عبارت برای عضو در IPERABLE]
هر درک لیست در پایتون شامل سه عنصر است:
- بیان خود عضو ، فراخوانی به یک روش یا هر عبارت معتبر دیگری است که یک مقدار را برمی گرداند. در مثال بالا ، عبارت I * من مربع مقدار عضو است.
- عضو شیء یا مقدار در لیست یا قابل تکرار است. در مثال بالا ، مقدار عضو i است.
- interable یک لیست ، تنظیم ، دنباله ، ژنراتور یا هر شیء دیگر است که می تواند عناصر خود را یک بار بازگرداند. در مثال بالا ، Imperable دامنه (10) است.
از آنجا که نیاز بیان بسیار انعطاف پذیر است ، درک لیست در پایتون در بسیاری از مکان ها به خوبی کار می کند که از نقشه استفاده می کنید (). می توانید نمونه قیمت گذاری را با درک لیست خود بازنویسی کنید:
>>> txns = [1. 09, 23. 56, 57. 84, 4. 56, 6. 78] >>> نرخ مالیات = . 08 >>> دنباله get_price_with_tax(TXN): . برگشت TXN * (1 + نرخ مالیات) >>> نهایی_پریس = [get_price_with_tax(i) برای i in txns] >>> نهایی_پریس [1. 1772000000000002 ، 25. 4448 ، 62. 4672000000005 ، 4. 9248 ، 7. 322400000000001]
تنها تمایز بین این اجرای و نقشه () این است که درک لیست در پایتون یک لیست را برمی گرداند ، نه یک شیء نقشه.
مزایای استفاده از لیست درک لیست
درک لیست اغلب به عنوان پایتونیک تر از حلقه ها یا نقشه () توصیف می شود. اما به جای اینکه کورکورانه آن ارزیابی را بپذیرید ، ارزش آن را دارد که مزایای استفاده از یک درک لیست در پایتون را در مقایسه با گزینه های دیگر درک کنید. بعداً ، در مورد چند سناریو که گزینه های دیگر انتخاب بهتری هستند ، خواهید آموخت.
یکی از مزایای اصلی استفاده از درک لیست در پایتون این است که این یک ابزار واحد است که می توانید در بسیاری از موقعیت های مختلف از آن استفاده کنید. علاوه بر ایجاد لیست استاندارد ، از درک لیست نیز می توان برای نقشه برداری و فیلتر استفاده کرد. لازم نیست برای هر سناریو از یک رویکرد متفاوت استفاده کنید.
این دلیل اصلی است که درک لیست در نظر گرفته می شود ، زیرا پایتون ابزارهای ساده و قدرتمندی را در آغوش می گیرد که می توانید در موقعیت های متنوعی از آن استفاده کنید. به عنوان یک مزیت جانبی اضافه شده ، هر زمان که از لیست درک لیست در پایتون استفاده می کنید ، نیازی نیست که هنگام تماس با نقشه () ترتیب مناسب آرگومان ها را به خاطر بسپارید.
درک مطلب نیز نسبت به حلقه ها اعلانی تر است ، به این معنی که خواندن و درک آنها آسان تر است. حلقه ها شما را ملزم به تمرکز بر نحوه ایجاد لیست می کنند. شما باید به صورت دستی یک لیست خالی ایجاد کنید ، روی عناصر حلقه کنید و هر یک از آنها را به انتهای لیست اضافه کنید. در عوض با درک لیستی در پایتون ، می توانید روی آنچه می خواهید در لیست بروید تمرکز کنید و به این اعتماد کنید که پایتون از نحوه ساخت لیست مراقبت خواهد کرد.
چگونه می توان درک مطلب خود را شارژ کرد
برای درک ارزش کامل که درک مطلب می تواند ارائه دهد ، درک دامنه عملکرد ممکن آنها مفید است. همچنین می خواهید تغییراتی را که در لیست درک لیست در پایتون 3. 8 به وجود می آید ، درک کنید.
با استفاده از منطق مشروط
پیش از این ، شما این فرمول را برای نحوه ایجاد لیست درک لیست دیدید:
new_list = [عبارت برای عضو در IPERABLE]
اگرچه این فرمول دقیق است ، اما کمی ناقص است. توضیحات کامل تر از فرمول درک مطلب ، پشتیبانی از شرط های اختیاری را اضافه می کند. متداول ترین روش برای افزودن منطق مشروط به درک لیست ، اضافه کردن مشروط به انتهای عبارت است:
new_list = [بیان برای عضو در تکرار (اگر مشروط)]
در اینجا ، بیانیه مشروط شما درست قبل از بسته شدن براکت آمده است.
شرط بندی ها مهم هستند زیرا آنها به درک لیست می توانند مقادیر ناخواسته را فیلتر کنند ، که به طور معمول نیاز به یک تماس برای فیلتر کردن () دارد:
>>> جمله = "موشک از مریخ برگشت" >>> مصادره = [i برای i in جمله if i in 'aeiou'] >>> مصادره ['e' ، 'o' ، 'e' ، 'a' ، 'e' ، 'a' ، 'o' ، 'a']
در این بلوک کد ، بیانیه مشروط هر شخصیت را در جمله ای که یک مصوت نیست ، فیلتر می کند.
مشروط می تواند هر بیان معتبر را آزمایش کند. اگر به یک فیلتر پیچیده تر نیاز دارید ، حتی می توانید منطق شرطی را به یک عملکرد جداگانه منتقل کنید:
>>> جمله = "موشک ، که به نام تد نامگذاری شده بود ، برگشت . از مریخ به دلیل اینکه او دوستانش را از دست داد. >>> دنباله is_consonant(حرف): . مصادره = 'aeiou' . برگشت حرف.ایزالفا() وت حرف.پایین() نه in مصادره >>> صامت = [i برای i in جمله if is_consonant(i)] ['t' ، 'h' ، 'r' ، 'c' ، 'k' ، 't' ، 'w' ، 'h' ، 'w' ، 's' ، 'n' ، 'm' ، 'د '، 't' ، 'd' ، 'c' ، 'm' ، 'b' ، 'c' ، 'k' ، 'f' ، 'r' ، 'm' ، 'm' ، 'r' ، 's s'،' b '، 'c' ، 's' ، 'h' ، 'm' ، 's' ، 's' ، 'd' ، 'h' ، 's' ، 'f' ، 'r' ، 'n' ، 'd'،' s ']
در اینجا ، شما یک فیلتر پیچیده is_consonant () ایجاد می کنید و این عملکرد را به عنوان عبارت مشروط برای درک لیست خود منتقل می کنید. توجه داشته باشید که مقدار عضو I نیز به عنوان آرگومان عملکرد شما منتقل می شود.
شما می توانید شرط را در انتهای بیانیه برای فیلتر ساده قرار دهید ، اما اگر می خواهید به جای فیلتر کردن آن ، مقدار عضو را تغییر دهید؟در این حالت ، قرار دادن مشروط در ابتدای عبارت مفید است:
new_list = [بیان (اگر مشروط) برای عضو در IPERABLE]
با استفاده از این فرمول ، می توانید از منطق شرطی برای انتخاب چندین گزینه ممکن برای خروجی استفاده کنید. به عنوان مثال ، اگر لیستی از قیمت ها دارید ، ممکن است بخواهید قیمت های منفی را با 0 جایگزین کنید و مقادیر مثبت را بدون تغییر بگذارید:
>>> نسخه های اصلی_ = [1. 25, -9. 45, 10. 22, 3. 78, -5. 92, 1. 16] >>> قیمت = [i if i > 0 دیگر 0 برای i in نسخه های اصلی_] >>> قیمت [1. 25 ، 0 ، 10. 22 ، 3. 78 ، 0 ، 1. 16]
Here, your expression i contains a conditional statement, if i>0 دیگر 0. این به Python می گوید اگر عدد مثبت باشد ، مقدار I را خروجی می کند ، اما اگر تعداد منفی باشد ، I را به 0 تغییر دهید. اگر این امر بسیار زیاد به نظر برسد ، ممکن است مفید باشد که منطق شرطی را به عنوان عملکرد خود مشاهده کنیم:
>>> دنباله دریافت_انه(قیمت): . برگشت قیمت if قیمت > 0 دیگر 0 >>> قیمت = [دریافت_انه(i) برای i in نسخه های اصلی_] >>> قیمت [1. 25 ، 0 ، 10. 22 ، 3. 78 ، 0 ، 1. 16]
اکنون ، بیانیه مشروط شما در GET_PRICE () موجود است ، و می توانید از آن به عنوان بخشی از بیان درک لیست خود استفاده کنید.
با استفاده از درک مجموعه و فرهنگ لغت
در حالی که درک لیست در پایتون ابزاری مشترک است ، می توانید درک مطلب و فرهنگ لغت را نیز ایجاد کنید. درک مطلب تقریباً دقیقاً مشابه یک درک لیست در پایتون است. تفاوت در این است که درک مطلب اطمینان حاصل کنید که خروجی حاوی هیچ نسخه ای نیست. می توانید با استفاده از بریس های مجعد به جای براکت ، یک درک مطلب ایجاد کنید:
>>> نقل قول = "زندگی ، اوه ، راهی پیدا می کند" >>> موانع_ منحصر به فرد = i برای i in نقل قول if i in 'aeiou'> >>> موانع_ منحصر به فرد
درک مطلب شما تمام مصوت های منحصر به فرد را که در نقل قول یافت می شود ، خروجی می کند. بر خلاف لیست ها ، مجموعه ها تضمین نمی کنند که موارد به هر ترتیب خاص ذخیره می شوند. به همین دلیل است که اولین عضو این مجموعه یک است ، حتی اگر اولین مصوت در نقل قول من باشد.
درک فرهنگ لغت مشابه است ، با نیاز اضافی برای تعریف یک کلید:
>>> مربع = i: i * i برای i in دامنه(10)> >>> مربع
برای ایجاد فرهنگ لغت مربع ، از بریس های فرفری استفاده می کنید (<>) و همچنین یک جفت ارزش کلید (i: i * i) در بیان شما.
با استفاده از اپراتور Walrus
Python 3. 8 عبارت واگذاری را که به عنوان اپراتور Walrus نیز شناخته می شود ، معرفی می کند. برای درک چگونگی استفاده از آن ، مثال زیر را در نظر بگیرید.
بگویید شما باید ده درخواست به یک API ارسال کنید که داده های دما را بازگرداند. شما فقط می خواهید نتایج را که بیش از 100 درجه فارنهایت است ، برگردانید. فرض کنید که هر درخواست داده های مختلفی را برمی گرداند. در این حالت ، هیچ راهی برای استفاده از درک لیست در پایتون برای حل مشکل وجود ندارد. بیان فرمول برای عضو در قابل تکرار (در صورت مشروط) راهی برای مشروط بودن داده ها به متغیری که عبارت می تواند به آن دسترسی پیدا کند ، فراهم نمی کند.
اپراتور Walrus این مشکل را حل می کند. این امکان را به شما می دهد تا ضمن اختصاص دادن مقدار خروجی به یک متغیر ، یک عبارت را اجرا کنید. مثال زیر نشان می دهد که چگونه این امکان پذیر است ، با استفاده از get_weather_data () برای تولید داده های آب و هوایی جعلی:
>>> وارد كردن تصادفی >>> دنباله get_weather_data(): . برگشت تصادفی.رنده کردن(90, 110) >>> hot_temps = [دما برای _ in دامنه(20) if (دما := get_weather_data()) >= 100] >>> hot_temps [107 ، 102 ، 109 ، 104 ، 107 ، 109 ، 108 ، 101 ، 104]
شما اغلب نیازی به استفاده از عبارت واگذاری در داخل یک درک لیست در پایتون ندارید ، اما این یک ابزار مفید است که در صورت لزوم در اختیار شما باشد.
در صورت عدم استفاده از درک لیست در پایتون
لیست درک مطلب مفید است و می تواند به شما در نوشتن کد ظریف کمک کند که خواندن و اشکال زدایی آسان باشد ، اما آنها انتخاب مناسبی برای همه شرایط نیستند. آنها ممکن است کد شما را آهسته تر اجرا کنند یا از حافظه بیشتری استفاده کنند. اگر کد شما کمتر عملکردی دارد یا درک آن سخت تر است ، احتمالاً بهتر است گزینه دیگری را انتخاب کنید.
مراقب درک تو در تو باشید
برای ایجاد ترکیبی از لیست ها ، فرهنگ لغت ها و مجموعه های موجود در یک مجموعه ، می توان درک مطلب را توخالی کرد. به عنوان مثال ، بگویید یک آزمایشگاه آب و هوا در حال پیگیری دمای بالا در پنج شهر مختلف برای هفته اول ژوئن است. ساختار داده مناسب برای ذخیره این داده ها می تواند یک درک لیست پایتون باشد که در یک درک فرهنگ لغت قرار دارد:
>>> شهر = ['آستین', "تاکوما", 'topeka', "ساکرامنتو", "شارلوت"] >>> دماغ = شهر: [0 برای _ in دامنه(7)] برای شهر in شهر> >>> دماغ 'Austin': [0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0] ، 'tacoma': [0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0] ، 'topeka': [0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0] ، 'ساکرامنتو': [0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0] ، 'Charlotte': [0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0] >
شما دما های مجموعه بیرونی را با درک فرهنگ لغت ایجاد می کنید. این عبارت یک جفت با ارزش کلیدی است ، که حاوی درک دیگری است. این کد به سرعت لیستی از داده ها را برای هر شهر در شهرها تولید می کند.
لیست های تو در تو یک روش متداول برای ایجاد ماتریس است که اغلب برای اهداف ریاضی مورد استفاده قرار می گیرند. به بلوک کد زیر نگاهی بیندازید:
>>> ماتریس = [[i برای i in دامنه(5)] برای _ in دامنه(6)] >>> ماتریس [ [0 ، 1 ، 2 ، 3 ، 4] ، [0 ، 1 ، 2 ، 3 ، 4] ، [0 ، 1 ، 2 ، 3 ، 4] ، [0 ، 1 ، 2 ، 3 ، 4] ، [0 ، 1 ، 2 ، 3 ، 4] ، [0 ، 1 ، 2 ، 3 ، 4] ]
درک لیست بیرونی [. برای _ در محدوده (6)] شش ردیف ایجاد می کند ، در حالی که درک لیست داخلی [I برای I در محدوده (5)] هر یک از این ردیف ها را با مقادیر پر می کند.
تاکنون ، هدف هر درک تو در تو کاملاً بصری است. با این حال ، موقعیت های دیگری نیز وجود دارد ، مانند مسطح کردن لیست های تو در تو ، که در آن منطق به طور حتم باعث می شود کد شما گیج کننده تر شود. این مثال را بگیرید که از یک لیست لیست تو در تو استفاده می کند تا یک ماتریس را صاف کند:
ماتریس = [ . [0, 0, 0], . [1, 1, 1], . [2, 2, 2], . ] >>> تخت = [حدود برای ردیف in ماتریس برای حدود in ردیف] >>> تخت [0 ، 0 ، 0 ، 1 ، 1 ، 1 ، 2 ، 2 ، 2]
کد برای صاف کردن ماتریس مختصر است ، اما ممکن است درک نحوه عملکرد آن چندان بصری نباشد. از طرف دیگر ، اگر قرار بود از حلقه ها برای صاف کردن همان ماتریس استفاده کنید ، کد شما بسیار ساده تر خواهد بود:
>>> ماتریس = [ . [0, 0, 0], . [1, 1, 1], . [2, 2, 2], . ] >>> تخت = [] >>> برای ردیف in ماتریس: . برای حدود in ردیف: . تخت.ضمیمه کردن(حدود) . >>> تخت [0 ، 0 ، 0 ، 1 ، 1 ، 1 ، 2 ، 2 ، 2]
اکنون می بینید که کد به طور همزمان یک ردیف ماتریس را طی می کند و قبل از حرکت به سمت بعدی ، تمام عناصر موجود در آن ردیف را بیرون می کشد.
در حالی که ممکن است درک لیست تک خطی به نظر می رسد پایتونیک تر به نظر می رسد ، مهمترین چیز نوشتن کد است که تیم شما می تواند به راحتی درک و اصلاح کند. هنگامی که رویکرد خود را انتخاب می کنید ، باید بر اساس اینکه فکر می کنید درک مطلب به خوانایی کمک می کند یا به خوانایی آسیب برساند ، باید یک تماس داوری برقرار کنید.
ژنراتور را برای مجموعه داده های بزرگ انتخاب کنید
درک لیست در پایتون با بارگذاری کل لیست خروجی در حافظه کار می کند. برای لیست های کوچک یا حتی متوسط ، این به طور کلی خوب است. اگر می خواهید مربع های یک هزار عدد صحیح اول را جمع کنید ، درک لیست این مشکل را به طرز تحسین برانگیز حل می کند:
>>> جمع([i * i برای i in دامنه(1000)]) 332833500
اما اگر می خواستید مربع های میلیارد عدد صحیح را جمع کنید ، چه می کنید؟اگر پس از آن روی دستگاه خود سعی کرده اید ، ممکن است متوجه شوید که رایانه شما غیر پاسخگو می شود. به این دلیل است که پایتون در تلاش است لیستی با یک میلیارد عدد صحیح ایجاد کند ، که حافظه بیشتری نسبت به رایانه شما می خواهد. رایانه شما ممکن است از منابع مورد نیاز برای تولید لیست عظیم و ذخیره آن در حافظه برخوردار نباشد. اگر به هر حال سعی کنید این کار را انجام دهید ، دستگاه شما می تواند کند شود یا حتی خراب شود.
هنگامی که اندازه یک لیست مشکل ساز می شود ، استفاده از ژنراتور به جای درک لیست در پایتون اغلب مفید است. یک ژنراتور یک ساختار داده بزرگ و بزرگ در حافظه ایجاد نمی کند ، بلکه در عوض یک تکرار پذیر را برمی گرداند. کد شما می تواند مقدار بعدی را از هر زمان که لازم باشد یا تا زمانی که به انتهای دنباله خود نرسید ، درخواست کنید ، در حالی که فقط یک مقدار واحد را در یک زمان ذخیره می کنید.
اگر قرار بود اولین میلیارد مربع را با یک ژنراتور جمع کنید ، برنامه شما به احتمال زیاد برای مدتی اجرا می شود ، اما نباید باعث یخ زدگی رایانه شما شود. مثال زیر از یک ژنراتور استفاده می کند:
>>> جمع(i * i برای i in دامنه(1000000000)) 333333332833333333500000000
می توانید بگویید که این یک ژنراتور است زیرا این عبارت توسط براکت ها یا بریس های مجعد احاطه نشده است. به صورت اختیاری ، ژنراتورها می توانند توسط پرانتز احاطه شوند.
مثال بالا هنوز به کار زیادی نیاز دارد ، اما این عملیات را تنبل انجام می دهد. به دلیل ارزیابی تنبل ، مقادیر فقط در صورت درخواست صریح محاسبه می شوند. بعد از اینکه ژنراتور مقدار را به دست آورد (به عنوان مثال ، 567 * 567) ، می تواند آن مقدار را به مبلغ در حال اجرا اضافه کند ، سپس آن مقدار را دور ریخته و مقدار بعدی را تولید کند (568 * 568). هنگامی که عملکرد جمع مقدار بعدی را درخواست می کند ، چرخه شروع می شود. این فرآیند ردپای حافظه را کوچک نگه می دارد.
نقشه () همچنین تنبل عمل می کند ، به این معنی که اگر در این حالت از آن استفاده کنید ، حافظه مسئله ای نخواهد بود:
>>> جمع(نقشه(لامبدا i: i*i, دامنه(1000000000))) 333333332833333333500000000
این به شما بستگی دارد که آیا شما بیان ژنراتور یا نقشه () را ترجیح می دهید.
پروفایل برای بهینه سازی عملکرد
بنابراین ، کدام رویکرد سریعتر است؟آیا باید از لیست درک لیست یا یکی از گزینه های آنها استفاده کنید؟به جای رعایت یک قانون واحد که در همه موارد صادق است ، مفیدتر است که از خود بپرسید که آیا عملکرد در شرایط خاص شما اهمیت دارد یا خیر. اگر اینطور نیست ، معمولاً بهتر است انتخاب هر رویکردی منجر به پاکترین کد شود!
اگر در سناریویی هستید که عملکرد در آن مهم است، معمولاً بهتر است رویکردهای مختلف را نمایه کنید و به داده ها گوش دهید. timeit یک کتابخانه مفید برای زمان بندی مدت زمان اجرای تکه های کد است. می توانید از timeit برای مقایسه زمان اجرا map() برای حلقه ها و درک لیست استفاده کنید:
>>> وارد كردن تصادفی >>> وارد كردن زمان >>> نرخ مالیات = . 08 >>> txns = [تصادفی.رنده کردن(100) برای _ in دامنه(100000)] >>> دنباله دریافت_انه(TXN): . برگشت TXN * (1 + نرخ مالیات) . >>> دنباله دریافت_قیمت_با_نقشه(): . برگشت لیست(نقشه(دریافت_انه, txns)) . >>> دنباله دریافت_قیمت_با_درک(): . برگشت [دریافت_انه(TXN) برای TXN in txns] . >>> دنباله get_prices_with_loop(): . قیمت = [] . برای TXN in txns: . قیمت.ضمیمه کردن(دریافت_انه(TXN)) . برگشت قیمت . >>> زمان.زمان(دریافت_قیمت_با_نقشه, عدد=100) 2. 0554370979998566 >>> زمان.زمان(دریافت_قیمت_با_درک, عدد=100) 2. 3982384680002724 >>> زمان.زمان(get_prices_with_loop, عدد=100) 3. 0531821520007725
در اینجا شما سه روش را تعریف می کنید که هر کدام از روش های متفاوتی برای ایجاد فهرست استفاده می کنند. سپس، به timeit می گویید که هر کدام از آن توابع را 100 بار اجرا کند. timeit کل زمان لازم برای اجرای آن 100 اعدام را برمی گرداند.
همانطور که کد نشان می دهد، بزرگترین تفاوت بین رویکرد مبتنی بر حلقه و نقشه () است، با اجرای حلقه 50٪ بیشتر طول می کشد. مهم بودن یا نبودن این موضوع به نیازهای برنامه شما بستگی دارد.
نتیجه
در این آموزش، شما یاد گرفتید که چگونه از درک لیست در پایتون برای انجام کارهای پیچیده بدون پیچیده کردن کد خود استفاده کنید.
- حلقه ها و فراخوانی های map() را با درک لیست اعلامی ساده کنید
- درک مطلب خود را با منطق شرطی شارژ کنید
- درک مجموعه و فرهنگ لغت ایجاد کنید
- تعیین کنید که وضوح یا عملکرد کد یک رویکرد جایگزین را دیکته می کند
هر زمان که مجبور به انتخاب یک روش ایجاد لیست هستید، پیاده سازی های متعددی را امتحان کنید و در نظر بگیرید که خواندن و درک آن در سناریوی خاص شما ساده ترین است. اگر عملکرد مهم است، می توانید از ابزارهای نمایه سازی استفاده کنید تا به جای تکیه بر حدس ها یا حدس ها در مورد اینکه چه چیزی بهترین کار را انجام می دهد، داده های عملی در اختیارتان قرار دهد.
به یاد داشته باشید که در حالی که درک لیست پایتون توجه زیادی را به خود جلب می کند، شهود و توانایی شما در استفاده از داده ها در هنگام شمارش به شما کمک می کند تا کد تمیزی بنویسید که وظیفه انجام کار را انجام می دهد. این در نهایت، کلید ساخت کد شما به پایتونیک است!
علامت گذاری به عنوان تکمیل شده
اکنون تماشا کنید این آموزش دارای یک دوره ویدیویی مرتبط است که توسط تیم Real Python ایجاد شده است. آن را همراه با آموزش نوشتاری تماشا کنید تا درک خود را عمیق تر کنید: درک مفاهیم لیست پایتون
یک ترفند کوتاه و شیرین پایتون را هر چند روز یک بار در صندوق ورودی خود دریافت کنید. هیچ هرزنامه ای وجود ندارد. لغو اشتراک در هر زمان. سرپرستی تیم Real Python.

درباره جیمز تیمینز
جیمز یک مشاور نرم افزار و توسعه دهنده پایتون است. وقتی پایتون نمی نویسد، معمولاً در قالب وبلاگ یا کتاب درباره آن می نویسد.
هر آموزش در Real Python توسط تیمی از توسعه دهندگان ایجاد می شود تا با استانداردهای کیفیت بالای ما مطابقت داشته باشد. اعضای تیمی که روی این آموزش کار کردند عبارتند از:
فارکس وکسب درامد...
ما را در سایت فارکس وکسب درامد دنبال می کنید
برچسب :
نویسنده : آرش اصل زاد
بازدید : <-PostHit->
تاريخ : پنجشنبه
29 تير
1402 ساعت: 12:07