دستور pop در پایتون در دسترسترین ابزار برنامه نویسان برای حذف دادهها از درون ساختارهایی مانند لیست و دیکشنری است. شاید این ابزار بهترین گزینه برای انجام همه کارها نباشد، اما وقتی که نیاز به حذف چیزی به صورت سریع و کارآمد داریم، هیچ ابزاری مانند تابع pop کاربرد ندارد. برنامهنویسان پایتون از دستور pop بهوفور استفاده میکنند. زیرا این دستور یکی از مناسبترین ابزارها برای ایجاد تغییرات در ساختارهایی مانند دیکشنریها و لیستهای پایتون است. برای افزایش بهرهوری در زمان کار با لیستها و دیکشنریهای پایتون لازم است که بر روی کار با متدهای تخصصی مانند دستور pop مسلط شویم.
در این مطلب از مجله فرادرس به بررسی دستور pop در پایتون پرداختهایم. ابتدا سینتکس این دستور را نمایش داده و توضیحاتی درباره آن بیان کردهایم و سپس روش استفاده از آن و استفاده از مقدار برگشت داده شده توسط pop را همراه با مثالهای مختلفی آموزش دادهایم. در نهایت هم روش استفاده از دستور pop در پایتون را بر روی دیکشنری همراه با مثالها و تکنیکهای مختلف بیان کردهایم.
دستور pop در پایتون چیست؟
به صورت پیشفرض از دستور pop برای حذف و برگرداندن آخرین عنصر از لیست در پایتون استفاده میشود. البته میتوان عناصر را به صورت هدفمند نیز حذف کرد. برای اینکار، باید شماره ایندکس عنصر مورد نظر را به عنوان آرگومان به متد pop ارسال کنیم. در نتیجه متد pop، آن عنصر را در درون لیست پیدا کرده، از لیست حذف و مقدار آن را برای استفاده احتمالی به بیرون ارسال میکند.
سینتکس دستور pop
برای بهکارگیری هریک از متدهای پایتون باید در ابتدا با شکل سینتکس خام آن متد آشنا شد. در کادر زیر سینتکس خام دستور pop() را نمایش دادهایم.
در کد نمایش داده شده بالا، list نام لیستی است که این دستور بر روی آن اجرا شده. index هم آرگومان اختیاری است. این آرگومان موقعیت عنصری را در list نشان میدهد که باید از آن حذف شود. اگر هیچ مقداری را به عنوان آرگومان index به دستور pop ارسال نکنیم، خود تابع pop() به صورت خودکار، آخرین عنصر لیست را از درون آن حذف کرده و به بیرون برمیگرداند.
در ادامه به مثالهایی از کار تابع pop() در لیستها نگاه خواهیم کرد. در این مثالها روش استفاده از تابع pop() را برای حذف و برگرداندن عنصر از درون لیست پیادهسازی کردهایم.
حذف آخرین عنصر از لیست
در مثال اول، از دستور pop در پایتون بدون آرگومان اختیاری index استفاده میکنیم. هدف از اجرای این کد، حذف آخرین عنصر از لیست و برگرداندن آن به بیرون است.
1fruits = ['apple', 'banana', 'cherry']
2last_fruit = fruits.pop()
3print(last_fruit) # Output: 'cherry'
4print(fruits) # Output: ['apple', 'banana']
5
همینطور که مشاهده میکنید، در مثال بالا از متد pop() بدون هیچ آرگومانی استفاده کردهایم. در این صورت تابع pop() به صورت خودکار آخرین عنصر را از درون لیست حذف کرده و به بیرون برمیگرداند. در لیست مثال بالا که برای نگهداری نام میوهها – لیست fruits – استفاده شده است، تابع pop() عنصر ‘cherry’ را پیدا کرده و از لیست حذف میکند. در نهایت هم با کمک تابع print() نام این میوه را در خروجی برای نمایش به کاربر چاپ میکند.
حذف عنصرهای لیست از موقعیت مشخص شده
در این مثال، لیستی از اعداد در اختیار داریم و میخواهیم که عنصری را با موقعیت از پیش تعیین شده از این لیست حذف کنیم. بنابراین باید موقعیت عنصر را به اطلاع متد pop() برسانیم.
1numbers = [1, 2, 3, 4, 5]
2third_number = numbers.pop(2)
3print(third_number) # Output: 3
4print(numbers) # Output: [1, 2, 4, 5]
5
در مثال بالا، متد pop() همراه با آرگومان مشخصی بهکار گرفته شده است. آرگومان 2 که به متد pop() ارسال شده، شماره ایندکس عنصری را نشان میدهد که باید از لیست حذف شود، یعنی سومین عنصر. در نتیجه بر اثر اجرای کد بالا عنصر 3 از لیست numbers حذف شده و به بیرون برگشت داده میشود.
در بخشهای بعدی نیز روش حذف عناصر از درون لیست را با استفاده از متد pop() بررسی کردهایم، اما اینبار جزئیات بیشتری از این اتفاق را به صورت دقیق مورد بررسی قرار دادهایم. در این جزئیات، تمام رفتارهای متد pop() به صورت کامل از حذف عنصر گرفته تا برگشت دادن آن به طور کامل توضیح داده شدهاند.
فیلم های مربوط به آموزش های اولیه پایتون برای همه
پایتون زبان برنامه نویسی بسیار انعطافپذیر و تقریبا همه کاره است و در نتیجه به یکی از محبوبترین زبانهای برنامهنویسی جهان تبدیل شده. در حال حاضر، تقریبا برای یادگیری هر علمی میتوان از انواع منابع متنوع آموزشی استفاده کرد. از کلاسهای آنلاین و حضوری تا کتاب و فیلمهای آموزشی، منابع متنوعی هستند که میتوان برای یادگیری به آنها مراجعه کرد. در این میان باید اشاره کنیم که فیلمهای آموزشی نسبت به سایر منابع از منافع بیشتری برای مخاطبانشان برخوردار هستند.
فرادرس با تمرکز خاص بر روی پایتون و تولید محتوی آموزشی به صورت روزانه و با کیفیت بالا به یکی از بهترین تولیدکنندگان منابع آموزش زبان برنامه نویسی پایتون تبدیل شده است. از مجموعه فیلمهای آموزشی پایتون برای نوجوانان میتوان به عنوان یکی از بهترین گزینهها برای شروع آموزش این زبان برنامهنویسی، یاد کرد. از دیگر گزینههای بسیار خوب برای آموزش پایتون، مخصوصا برای افراد مبتدی، تماشای فیلم آموزش رایگان برنامه نویسی سریع و آسان پایتون در ۱۴۰ دقیقه از فرادرس است. موارد معرفی شده در زیر، مناسب کسانی است که در حال عبور از دوره آموزش اولیه پایتون هستند و برای ارتقای سطح مهارت خود به منابع جدیدی نیاز دارند.
حذف عناصر به صورت قدم به قدم
در پایتون، لیستها از نوع ساختارهای داده تغییرپذیر هستند. به این معنی که بعد از ایجاد لیست میتوان آن را دستکاری کرد. برای کار با لیستهای پایتون، متدهای زیادی وجود دارند که خدمات متنوعی را به توسعه دهندگان ارائه میدهند. با مشاهده فیلم آموزش برنامه نویسی پایتون پیشرفته و ترفندهای آن از فرادرس تا اندازه خوبی در کار با لیستها و سایر نوعهای داده پایتون حرفهای میشوید.
یکی از رایجترین عملیاتی که بر روی لیستها انجام میگیرد، عملیات حذف و اضافه عناصر به آنهاست. در این مطلب به بررسی متد pop برای حذف عناصر از درون لیست پرداختهایم. این متد پایتون به صورت پیشفرض آخرین عنصر را از لیست حذف میکند. اما با ارسال عددی به عنوان آرگومان میتوان دقیقا عنصر خاصی را از جایگاه مشخص شدهاش در لیست حذف کرد.
در این قسمت با جزئیات بیشتری به بررسی روند حذف عناصر از لیست با کمک دستور pop در پایتون میپردازیم. فرض کنیم که لیستی به نام my_list – مانند کد زیر – در اختیار داریم.
1my_list = [1, 2, 3, 4, 5]
2
برای اینکه آخرین عنصر موجود در این لیست را حذف کنیم، فقط کافیست که متد pop را بدون هیچ آرگومانی بر روی این لیست فراخوانی کنیم. در کادر زیر روش انجام این کار را مشاهده میکنید.
متد pop() آخرین عنصر موجود در لیست را حذف کرده و به بیرون برگشت میدهد. در لیست my_list آخرین عنصر شماره 5 بود. اکنون لیست بهروزرسانی شده به شکل زیر نمایش داده میشود.
[1, 2, 3, 4]
اما اگر بخواهیم که عنصر مشخصی را از لیست حذف کنیم چه باید کرد؟ برای رسیدن به این هدف، فقط کافی است که ایندکس آن عنصر را به عنوان آرگومان به متد pop() ارسال کنیم.
به عنوان مثال، برای حذف عنصری از لیست که در ایندکس شماره 1 قرار دارد – این عنصر دومین عنصر لیست است – میتوانیم کد خود را به شکل پایین بنویسیم.
در کد بالا، متد pop() عنصر قرار گرفته در ایندکس شماره 1 را – مقدار 2 – از لیست حذف کرده و مقدار آن را به بیرون برمیگرداند. بعد از اجرای کد بالا، لیست بهروز شده شبیه به مورد زیر است.
[1, 3, 4]
درک رفتار دستور pop در لیست
بسیار مهم است که بدانیم، بعد از حذف عنصری از درون لیست با استفاده از دستور pop در پایتون، لیست به صورت درجا تغییر میکند. این مسئله به معنای آن است که لیست اصلی تغییر کرده و عنصری که حذف شده دیگر جزئی از دادههای درون لیست نیست. علاوه بر موارد گفته شده، اگر ایندکس مشخص شده، فراتر از ایندکسهای در دسترس درون لیست باشد، متد pop پیغام خطای «IndexError» را به برنامه برمیگرداند.
اما در صورت استفاده از ایندکس منفی، لیست از انتها پیمایش میشود. این کار به خودیخود عامل رویدادن خطا نیست. مگر اینکه ایندکس منفی هم از محدوده ایندکسهای لیست خارج شود.
همچنین شایان ذکر است که متد pop() روشی بسیار کارآمد برای حذف عناصر از لیستهاست، زیرا این متد به صورت پیشفرض عملیات خود را برروی انتهای لیست انجام میدهد. به این معنا که حذف عناصر، بدون در نظر گرفتن اندازه لیست، زمان ثابتی صرف میکند. البته اگر نیاز به حذف عنصری از ابتدا یا میانه لیست داشته باشیم، احتمالا استفاده از متد pop() بهترین گزینه در دست نباشد. زیرا این متد بعد از حذف عنصری از ابتدا یا میانه لیست باید بقیه عناصر بعد از آن را به اندازه یک واحد فضا در لیست جابهجا کند.
در بخش بعد، به بررسی مقدار برگشت داده شده از دستور pop در پایتون و روش استفاده از آن در کدها میپردازیم.
مقدار برگشت داده شده توسط متد pop
متد pop در پایتون، یکی از متدهای لیست در پایتون است که عنصر مشخص شدهای را از درون لیست حذف کرده و عنصر حذف شده را به بیرون برمیگرداند. این مسئله به طور خاص زمانی مفید است که بخواهیم بر روی عنصر حذف شده عملیاتی را انجام دهیم. اما اگر نیازی به عنصر برگشت داده شده توسط دستور pop نداشته باشیم، به سادگی میتوانیم آن را بدون استفاده رها کرده – دور بیاندازیم – و به ادامه کار با کدهای خود بپردازیم.
این مقدار برگشت داده شده را میتوان به روشهای گوناگونی استفاده کرد. به عنوان مثال، میتوان آن را به متغیری اختصاص داد یا در لیست دیگری وارد کرد و یا با کمک تابع Print آن را برای نمایش در خروجی چاپ کرد.
مثال نمایش داده شده در پایین را در نظر بگیرید. در این مثال عنصری را از لیست numbers حذف کردهایم.
1numbers = list(range(1, 6))
2third_number = numbers.pop(2)
3print(third_number) # Output: 3
در مثال نمایش داده شده بالا، متد pop با استفاده از آرگومان عدد 2 استفاده شده است. استفاده از این مقدار به عنوان آرگومان باعث شده که سومین عنصر از لیست numbers، از آن حذف شده و به بیرون برگشت داده شود. عنصر سوم برابر با عدد 3 است. سپس مقدار برگشت داده شده را به متغیری به نام third_number اختصاص داده و با کمک این متغیر آن را در خروجی چاپ کردیم.
اگر متد pop را بر روی لیست خالی فراخوانی کنیم، با پیغام خطای «IndexError» روبهرو خواهیم شد. در صورت عدم اطمینان از زمان خالی شدن لیست، باید بتوانیم این خطا را مدیریت کنیم.
1empty_list = []
2empty_list.pop() # Raises an IndexError
3
روش های جایگزین دستور pop در پایتون
استفاده از دستور pop برای حذف عناصر از درون لیست بسیار کاربردی است. اما در زمان کار با لیستها ممکن است با سناریوهای مختلفی روبهبرو شویم، بنابراین، همیشه نمیتوان این روش را به عنوان بهترین روش در نظر گرفت.
در این بخش از مطلب به بررسی چند مورد از روشهایی میپردازیم که به عنوان جایگزین استفاده از متد pop در بعضی از موقعیتهای خاص شناخته میشوند. برای دیدن مثالهای بیشتر درباره انواع روشهای حذف دادهها از ساختارهایی مانند لیست، آرایه و غیره میتوانید مطلب کدهای پایتون آماده کاربردی و ضروری برای برنامه نویسان مبتدی تا حرفه ای را از مجله فرادرس مطالعه کنید. در این مطلب تلاش کردیم که به طور گسترده انواع مسائل مربوط به لیستها را پوشش دهیم.
استفاده از عبارت del
عبارت del میتواند عنصری را از درون لیست، با ایندکس مشخص شده حذف کند. این عبارت شبیه به متد pop است که آرگومان ایندکس را میپذیرد. اما با این تفاوت که هیچ مقداری توسط عبارت del به بیرون برگشت داده نمیشود.
1my_list = [1, 2, 3, 4, 5]
2del my_list[2]
3print(my_list) # Output: [1, 2, 4, 5]
استفاده از متد remove
از متد remove میتوان برای حذف اولین رویداد از عنصر خاصی در درون لیست استفاده کرد. این متد، عنصری را که باید حذف شود را به عنوان آرگومان میپذیرد و هیچ مقداری را در خروجی برنمیگرداند.
1my_list = [1, 2, 3, 4, 5]
2my_list.remove(3)
3print(my_list) # Output: [1, 2, 4, 5]
تکنیک Slicing
برای حذف عناصر از لیست میتوان از تکنیک تکهتکه کردن یا Slicing نیز استفاده کرد. به منظور انجام این کار باید از نشانهگذاری مخصوص Slice استفاده شود. با این نشانهگذاری محدودهای از عناصر را مشخص میکنند که باید حفظ شده و در لیست جدیدی قرار بگیرند. روش استفاده از نشانهگذاری مخصوص Slicing را در کدهای زیر مشاهده میکنید. برای اینکار از علامت دو نقطه «: » در لیست استفاده میشود.
1my_list = [1, 2, 3, 4, 5]
2new_list = my_list[:2] + my_list[3:]
3print(new_list) # Output: [1, 2, 4, 5]
در مثال بالا، با کمک تکنیک تکهتکهسازی و ساخت لیست جدید با استفاده از عناصر قبل و بعد از عنصر هدف، اقدام به حذف آن عنصر کردهایم.
استفاده از دستور pop در پایتون بر روی دیکشنری ها
دیکشنریهای پایتون جزو مهمترین و مفیدترین ساختارهای ذخیره دادهای هستند که به طور خاص در پروژههای مربوط به وب اپلیکیشنها و کار با API-ها به اندازه زیادی بهکار برده میشوند. با مشاهده فیلم آموزش رایگان داده ساختارهای Dictionary و Set در پایتون از فرادرس با این نوع داده به حد قابل قبولی آشنا میشوید. به منظور کمک به مخاطبین خود، لینک مربوط به فیلم معرفی شده را در پایین نیز قرار دادهایم.
از آنجا که متد pop جزئی از متدهای دیکشنری در پایتون نیز هست، میتوان از این متد برای حذف داده در دیکشنریها هم استفاده کرد. با کمک این متد، کلید مشخص شده از دیکشنری حذف و مقدار آن به بیرون برگشت داده میشود.
در کادر زیر، سینتکس استفاده از دستور pop را بر روی دیکشنریهای پایتون پیادهسازی کردهایم.
1dict.pop(key[, default])
وقتی که متد pop بر روی دیکشنری اعمال میشود، کاملا مشخص است که بهجای ارسال ایندکس به آن باید یکی از کلیدهای موجود در دیکشنری را ارسال کنیم. متد pop مقدار متصل شده به آن کلید را برمیگرداند. سپس به صورت همزمان، جفت «کلید-مقدار» (Key: Value) مورد نظر را نیز از دیکشنری حذف میکند.
همچنین میتوانیم مقدار دلخواه اختیاری را تعریف کنیم که در صورت پیدا نشدن کلید مورد نظر در دیکشنری به بیرون برگشت داده شود. اگر کلید ارسال شده به عنوان آرگومان در دیکشنری پیدا نشد و همینطور مقدار دلخواهی هم به عنوان داده برگشتی پیشفرض تعریف نشده بود، در این صورت با پیغام خطای «KeyError» روبهرو میشویم. اما اگر مقدار پیشفرضی را فراهم کرده باشیم، دیگر با پیغام خطا روبهرو نشده و آن مقدار به خروجی متد برگشت داده میشود.
مقدار پیش فرض دیکشنری در پایتون
وقتی که از متد pop() بر روی دیکشنریها استفاده میکنیم، میتوانیم مقدار پیشفرضی را تعریف کنیم تا در زمانهای وجود نداشتن کلید در دیکشنری از برخواستن پیغام خطا جلوگیری کند. در چنین موقعیتهایی بهجای جواب، این مقدار پیشفرض به بیرون برگشت داده میشود. معمولا از این روش برای جلوگیری از رویدادن خطای «KeyError» استفاده میشود.
برای مثال در کد زیر عبارت Not Found چاپ خواهد شد. زیرا کلید d در دیکشنری داده شده وجود ندارد.
1# Create a dictionary
2my_dict = {'a': 1, 'b': 2, 'c': 3}
3
4# Remove a specific key and provide default value
5value = my_dict.pop('d', 'Not Found')
6
7# Prints the returned value
8print(value)
استفاده از متد pop بر روی دیکشنری های تودرتو
از متد pop() برای حذف عناصر از درون دیکشنریهای تودرتو هم میتوان استفاده کرد. این امکان بر روی لیستها هم به همین طریق موجود است. دیکشنریهای تودرتو به دیکشنریهایی گفته میشود که درون دیکشنریهای دیگر قرار دارند.
1# Define a nested dictionary
2nested_dict = {
3 'a': {'x': 1, 'y': 2, 'z': 3},
4 'b': {'x': 4, 'y': 5, 'z': 6},
5 'c': {'x': 7, 'y': 8, 'z': 9}
6}
7
8# Pop a key-value pair from the outer dictionary
9removed_dict = nested_dict.pop('c')
10print(removed_dict)
بر اثر اجرای کد بالا دادههای دیکشنری به صورت {‘x’: 7, ‘y’: 8, ‘z’: 9} در خروجی چاپ میشوند.
همچنین از طریق مشخص کردن هر جفت کلید-مقدار دلخواهی، میتوانیم اقدام به حذف مقدار درونی از یکی از دیکشنریهای موجود در درون دیکشنری اصلی بکنیم. برای مثال در کد زیر از دیکشنری اول عدد 2 را حذف خواهیم کرد.
1# Define a nested dictionary
2nested_dict = {
3 'a': {'x': 1, 'y': 2, 'z': 3},
4 'b': {'x': 4, 'y': 5, 'z': 6},
5 'c': {'x': 7, 'y': 8, 'z': 9}
6}
7
8# Pop a key-value pair from an inner dictionary
9popped_inner_value = nested_dict['a'].pop('y')
10print(popped_inner_value)
مدیریت خطای KeyError از درون دیکشنری پایتون
رویکرد دیگری که برای مدیریت خطای «KeyError» به کار میرود استفاده از بلوک کد try-except است. این روش از روش قبلی ظریفتر و تمیزتر است. برای گیر انداختن خطاهای متد pop() در پایتون، مثال زیر، روش استفاده از بلوک کد try-except را نمایش میدهد.
1# Create a dictionary
2my_dict = {'a': 1, 'b': 2, 'c': 3}
3
4# Create the try-except block to catch the error
5try:
6 value = my_dict.pop('d')
7except KeyError:
8 print("Key not found")
روش دیگری که برای مدیریت خطای «KeyError» وجود دارد، پیشگیری از آن است. برای اینکار از کلمه کلیدی in استفاده میکنیم. با کمک کلمه کلیدی in قبل از اینکه اقدام به حذف مقدار کلید خاصی بکنیم، بررسی میکنیم که آیا کلید مورد نظر در دیکشنری وجود دارد یا نه. در صورت وجود نداشتن آن کلید، دیگر نیازی به استفاده از متد pop() نیست.
برای مثال در کد زیر، این رویکرد مدیریت خطا را پیادهسازی کردهایم.
1# Create a dictionary
2my_dict = {'a': 1, 'b': 2}
3
4# Check key existence before popping
5key = 'c'
6if key in my_dict:
7 value = my_dict.pop(key)
8 print(f"Popped value: {value}")
9else:
10 print("Key not found.")
در اثر اجرای کد بالا در خروجی عبارت «Key not found» نمایش داده میشود. زیرا کلیدی که در صدد حذف آن هستیم در دیکشنری وجود ندارد.
فیلم های مربوط به آموزش های پیشرفته پایتون در فرادرس
صَرف زمان و تمرکز برروی یادگیری مهارتهای پایتون، میتواند موقعیتهای شغلی متنوعی مانند طراحی سایت، طراحی نرمافزار، بازی سازی، هوش مصنوعی و غیره را در مقابل برنامهنویسان قرار دهد. البته باید توجه کنیم، پایتون با اینکه فرایند یادگیری سادهای دارد اما برای حرفهایتر شدن در ادامه باید تکنیکهای پیشرفتهتری را بیاموزیم. فیلمهای آموزشی فرادرس، نه تنها به عنوان کمک درسی شامل نکات مفیدی برای دانشجویان است بلکه حتی اشخاص کارجو و برنامه نویسان حرفهای نیز میتوانند از محتوای این فیلمها استفاده ببرند. در ادامه، چند مورد از فیلمهای آموزشی مربوط به تکنیکهای پیشرفته پایتون را معرفی کردهایم. تسلط به مهارتهای آموزش داده شده در فیلمهای زیر، به وضوح توانایی بیشتری را در پیادهسازی پروژهها به برنامهنویسان میدهد.
در صورت تمایل با کلیک بر روی تصویر زیر به صفحه اصلی مجموعه فیلمهای آموزش برنامه نویسی پایتون هدایت شده و میتوانید فیلمهای بیشتری را مشاهده کنید.
جمعبندی
دستور pop در پایتون روشی سریع و ساده برای حذف عناصر از درون لیستها و دیکشنریهای پایتون است. شناخت دقیق رفتار این تابع در زمان حذف عناصر از جایگاههای مشخص شده یا برگشت دادن مقادیر حذف شده از لیست، برای نوشتن کدهای کارآمد مهم است. همچنین شایان ذکر است که برای متد pop در پایتون نیز جایگزینهای دیگری مانند عبارت del، دستور Remove و تکنیک «تکهتکهسازی» (Slicing) وجود دارد. با توجه به کاربردهای خاص میتوان از هر کدام از گزینههای جایگزین استفاده کرد.
در این مطلب از مجله فرادرس با دستور pop در پایتون آشنا شدیم. از سینتکس این دستور شروع کرده و تا انواع روشهای استفاده از آن را بر روی لیستها و دیکشنریها بررسی کردیم. موقعیتهای مختلف ظهور خطای «KeyError» را بیان کرده و روشهایی که برای مدیریت این خطا در لیستها و دیکشنریها وجود دارد را نیز آموزش دادهایم.
source