📢 مقایسه کامل متدهای حذف در فهرستها (remove, pop, clear, del) 🐍
تو این پست قراره چهار ابزار قدرتمند برای حذف عناصر از فهرستها در پایتون رو زیر ذرهبین ببریم:
remove(), pop(), clear()، و del. 😎
میخوایم کاربردهاشون، تفاوتهاشون، و نکات ریز حرفهای رو با مثالهای کاربردی بررسی کنیم. آمادهاید؟ بریم شروع کنیم! 🚀
⬟〰️⬟〰️⬟〰️⬟〰️⬟
1️⃣ متد ()remove: حذف اولین نمونه از یه مقدار
♦️ کاربرد: وقتی میخوای یه مقدار خاص (نه ایندکس) رو از فهرست حذف کنی، ()remove اولین نمونه از اون مقدار رو پیدا و حذف میکنه.
📝 سینتکس:
my_list.remove(value) # Hazf avalin namone az value
✨ مثال:
fruits = ["sib", "moz", "sib", "portoghal"]
fruits.remove("sib") # Hazf avalin "sib"
print(fruits) # Khoroji: ["moz", "sib", "portoghal"]
💡 نکات ریز:
- اگه مقدار تو فهرست نباشه، ارور ValueError میگیره. برای جلوگیری:
if "anar" in fruits:
fruits.remove("anar")
else:
print("Anar nist! 🚫")
- فقط اولین نمونه رو حذف میکنه. اگه بخوای همه نمونهها رو حذف کنی، باید حلقه بزنی:
while "sib" in fruits:
fruits.remove("sib")
- برای فهرستهای بزرگ، ()remove ممکنه کند باشه چون باید کل فهرست رو اسکن کنه.
- فقط با مقدار کار میکنه، نه ایندکس.
⬟〰️⬟〰️⬟〰️⬟〰️⬟
2️⃣ متد ()pop: حذف و برگردوندن عنصر با ایندکس
♦️ کاربرد: یه عنصر رو با ایندکسش حذف میکنه و مقدار حذفشده رو برمیگردونه. اگه ایندکس ندی، آخرین عنصر رو حذف میکنه.
📝 سینتکس:
my_list.pop(index) # Hazf onsor ba index (pishfarz: akharin onsor)
✨ مثال:
fruits = ["sib", "moz", "portoghal"]
last_fruit = fruits.pop() # Hazf akharin onsor
print(last_fruit) # Khoroji: portoghal
print(fruits) # Khoroji: ["sib", "moz"]
# Ya ba index
second_fruit = fruits.pop(1) # Hazf "moz"
print(second_fruit) # Khoroji: moz
print(fruits) # Khoroji: ["sib"]
💡 نکات ریز:
- اگه ایندکس اشتباه بدی (مثلاً pop(10) تو فهرست 3 تایی)، ارور IndexError میگیره.
- چون مقدار حذفشده رو برمیگردونه، برای کارهایی مثل پشته (stack) عالیه:
stack = [1, 2, 3]
top = stack.pop() # 3 ro migire va hazf mikone
- اگه فهرست خالی باشه و pop() بزنی، IndexError میگیره.
- سریعتر از remove() برای حذف با ایندکس، چون مستقیم به ایندکس دسترسی داره.
⬟〰️⬟〰️⬟〰️⬟〰️⬟
3️⃣ متد ()clear: خالی کردن کل فهرست
♦️ کاربرد: همه عناصر فهرست رو حذف میکنه، ولی خود متغیر فهرست میمونه (خالی).
📝 سینتکس:
my_list.clear() # Hazf hame onsorha
✨ مثال:
fruits = ["sib", "moz", "portoghal"]
fruits.clear()
print(fruits) # Khoroji: []
💡 نکات ریز:
- برعکس del my_list، متغیر فهرست همچنان وجود داره، فقط خالیه.
- برای وقتی مناسبه که میخوای فهرست رو نگه داری و بعداً دوباره پر کنی.
- خیلی سریع و بهینهست، چون نیازی به بررسی ایندکس یا مقدار نداره.
- هیچ مقداری برنمیگردونه.
⬟〰️⬟〰️⬟〰️⬟〰️⬟
4️⃣ دستور del: حذف انعطافپذیر
♦️ کاربرد: یه دستور کلی پایتونه که میتونه یه عنصر، یه بازه (slice)، یا کل فهرست رو حذف کنه.
📝 سینتکس:
del my_list[index] # Hazf yek onsor
del my_list[start:end] # Hazf yek baze
del my_list # Hazf tamame list
✨ مثال:
fruits = ["sib", "moz", "portoghal", "anar"]
del fruits[1] # Hazf "moz"
print(fruits) # Khoroji: ["sib", "portoghal", "anar"]
del fruits[0:2] # Hazf az index 0 ta 1
print(fruits) # Khoroji: ["anar"]
del fruits # Hazf kole list
# print(fruits) # Error: 'fruits' is not defined
💡 نکات ریز:
- اگه ایندکس یا برش اشتباه بدی، ارور IndexError میگیره.
- برعکس ()pop، مقدار حذفشده رو برنمیگردونه.
- میتونه روی اشیاء دیگه (مثل دیکشنری یا متغیر) هم کار کنه:
my_dict = {"name": "ali"}
del my_dict["name"]
- برای حذف کل فهرست، حافظه رو کامل آزاد میکنه (برعکس ()clear که فقط خالی میکنه).
- تو حلقهها با احتیاط استفاده کن، چون حذف با del ممکنه ایندکسها رو بههم بریزه:
numbers = [1, 2, 3, 4]
for i in range(len(numbers)):
del numbers[i] # Bad idea! IndexError
💯 @PythonForYou 🧑💻👩💻
👇 ادامه در پست بعد 👇
📌 مثال ترکیبی:
fruits = ["sib", "moz", "sib", "portoghal"]
fruits.remove("sib") # Hazf avalin "sib" -> ["moz", "sib", "portoghal"]
last = fruits.pop() # Hazf va bargardandane "portoghal" -> ["moz", "sib"]
del fruits[0] # Hazf "moz" -> ["sib"]
fruits.clear() # Khali kardane list -> []
print(fruits) # Khoroji: []
⬟〰️⬟〰️⬟〰️⬟〰️⬟
🟠 نکات حرفهای و ریز برای کار با این متدها
1️⃣ انتخاب ابزار مناسب:
- اگه مقدار خاصی داری (مثل "sib")، از ()remove استفاده کن.
- اگه به ایندکس دسترسی داری یا میخوای مقدار حذفشده رو داشته باشی، از ()pop استفاده کن.
- اگه فقط میخوای فهرست رو خالی کنی، ()clear بهترینه.
- اگه میخوای انعطافپذیر باشی (حذف یه عنصر، برش، یا کل فهرست)، del عالیه.
—-—-—-—-—-—-—-—-—-—-—
2️⃣ مدیریت ارورها با try-except:
برای remove() و del همیشه احتمال ارور رو در نظر بگیر:
fruits = ["sib", "moz"]
try:
fruits.remove("anar")
except ValueError:
print("Anar nist! 🚫")
try:
del fruits[10]
except IndexError:
print("Indeks na-mojood! 🚫")
—-—-—-—-—-—-—-—-—-—-—
3️⃣ حذف چندگانه با شرط:
- اگه میخوای چندتا عنصر رو بر اساس شرط حذف کنی، به جای حلقه با remove() یا del، از List Comprehension استفاده کن که ایمنتره:
numbers = [1, 2, 3, 4, 5]
numbers = [x for x in numbers if x % 2 != 0] # Hazf zojha
print(numbers) # Khoroji: [1, 3, 5]
—-—-—-—-—-—-—-—-—-—-—
4️⃣ عملکرد در فهرستهای بزرگ:
🔸 remove(): برای فهرستهای بزرگ کندتره، چون باید کل فهرست رو اسکن کنه.
🔸 pop(): برای حذف از آخر فهرست خیلی سریعه (O(1))، ولی برای ایندکسهای وسط کندتره (O(n)).
🔸 clear(): سریعترین برای خالی کردن فهرست.
🔸 del: برای حذف برشها یا کل فهرست بهینهست، ولی برای حذف تکی ممکنه از pop() کندتر باشه.
—-—-—-—-—-—-—-—-—-—-—
5️⃣ حذف در فهرستهای تودرتو:
برای فهرستهای تودرتو، del و pop() بهترن چون میتونی مستقیم به ایندکس دسترسی داشته باشی:
matrix = [[1, 2, 3], [4, 5, 6]]
del matrix[0][1] # Hazf 2
print(matrix) # Khoroji: [[1, 3], [4, 5, 6]]
—-—-—-—-—-—-—-—-—-—-—
6️⃣ تفاوت حافظه:
🔸clear() فهرست رو خالی میکنه ولی متغیر میمونه.
🔸 del my_list کل متغیر رو از حافظه پاک میکنه، که برای آزادسازی حافظه تو برنامههای سنگین بهتره.
big_list = [0] * 1000000
del big_list # Hافظه ro kamel azad mikone
—-—-—-—-—-—-—-—-—-—-—
7️⃣ حذف ایمن در حلقه:
حذف با remove() یا del تو حلقه روی فهرست ممکنه ایندکسها رو بههم بریزه:
fruits = ["sib", "moz", "sib"]
for f in fruits: # Bad idea!
fruits.remove(f) # IndexError ya natije ghalat
✅ راه درست: از حلقه معکوس یا List Comprehension استفاده کن:
fruits = ["sib", "moz", "sib"]
fruits = [f for f in fruits if f != "sib"]
print(fruits) # Khoroji: ["moz"]
💯 @PythonForYou 🧑💻👩💻
👇 ادامه در پست بعد 👇
✅ مثالهای کاربردی ترکیبی
💠 مدیریت سبد خرید:
cart = ["sib", "moz", "sib", "portoghal"]
cart.remove("sib") # Hazf avalin sib
item = cart.pop(0) # Hazf va gereftane moz
print(f"Item hazf shode: {item}")
del cart[0:1] # Hazf yek onsor dige
print(cart) # Khoroji: ["portoghal"]
cart.clear() # Khali kardane sabad
print(cart) # Khoroji: []
—-—-—-—-—-—-—-—-—-—-—
💠 فیلتر کردن دادههای نامعتبر:
data = ["ali", "", "zahra", "", "babak"]
try:
while "" in data:
data.remove("") # Hazf khaliha
except ValueError:
pass
print(data) # Khoroji: ["ali", "zahra", "babak"]
—-—-—-—-—-—-—-—-—-—-—
💠 مدیریت موجودی انبار:
stock = ["sib", "moz", "portoghal", "anar"]
if stock:
item = stock.pop() # Hazf akharin item
print(f"Item bargiri shod: {item}")
del stock[0:2] # Hazf do item aval
print(stock) # Khoroji: ["anar"]
💯 @PythonForYou 🧑💻👩💻
📢 تسلط بر فهرستها (بدون متدهای حذف و اضافه) 🐍
تو این پست قراره عمیقتر به فهرستها (Lists) در پایتون نگاه کنیم و روی تکنیکها و متدهایی تمرکز کنیم که فراتر از اضافه و حذف عنصرن. 😎
از چرخش فهرست و حلقهها گرفته تا برشها، آمار ساده، و نکات تورفتگی، همهچیز اینجاست! 🚀
بریم شروع کنیم!
💯 @PythonForYou 🧑💻👩💻
✨ اینجا روی متدهایی تمرکز میکنیم که برای مدیریت، مرتبسازی، و تحلیل فهرستها استفاده میشن.
🔰 index(value): ایندکس اولین نمونه از یه مقدار رو برمیگردونه.
fruits = ["sib", "moz", "portoghal", "sib"]
print(fruits.index("sib")) # Khoroji: 0
—-—-—-—-—-—-—-—-—-—-—
🔰 count(value): تعداد دفعات یه مقدار تو فهرست رو برمیگردونه.
print(fruits.count("sib")) # Khoroji: 2
—-—-—-—-—-—-—-—-—-—-—
🔰 sort(key=None, reverse=False): فهرست رو بهصورت درجا مرتب میکنه.
numbers = [3, 1, 4, 2]
numbers.sort()
print(numbers) # Khoroji: [1, 2, 3, 4]
numbers.sort(reverse=True)
print(numbers) # Khoroji: [4, 3, 2, 1]
—-—-—-—-—-—-—-—-—-—-—
🔰 reverse(): ترتیب فهرست رو معکوس میکنه (درجا).
numbers = [1, 2, 3, 4]
numbers.reverse()
print(numbers) # Khoroji: [4, 3, 2, 1]
—-—-—-—-—-—-—-—-—-—-—
🔰 copy(): یه کپی سطحی از فهرست میسازه.
fruits = ["sib", "moz"]
fruits_copy = fruits.copy()
fruits_copy[0] = "portoghal"
print(fruits) # Khoroji: ["sib", "moz"]
print(fruits_copy) # Khoroji: ["portoghal", "moz"]
💯 @PythonForYou 🧑💻👩💻
⭐️ تکنیکهای پیشرفته و نکات ریز
1️⃣ چرخش درون کل یک فهرست
🔸 چرخش درجا یعنی جابهجایی عناصر بدون ساخت فهرست جدید.
✨ مثال چرخش کامل:
numbers = [1, 2, 3, 4]
numbers.reverse()
print(numbers) # Khoroji: [4, 3, 2, 1]
✨ مثال چرخش به تعداد خاص (2 خانه به چپ):
numbers = [1, 2, 3, 4]
k = 2
numbers[:] = numbers[k:] + numbers[:k]
print(numbers) # Khoroji: [3, 4, 1, 2]
—-—-—-—-—-—-—-—-—-—-—
2️⃣ نگاهی دقیقتر به حلقهی for
حلقههای for برای پیمایش فهرستها عالیان.
🔹 پیمایش مستقیم:
fruits = ["sib", "moz", "portoghal"]
for fruit in fruits:
print(f"Mive: {fruit}")
# Khoroji:
# Mive: sib
# Mive: moz
# Mive: portoghal
🔹 با ایندکس و enumerate:
for i, fruit in enumerate(fruits):
print(f"Index {i}: {fruit}")
—-—-—-—-—-—-—-—-—-—-—
3️⃣ انجام کارهای بیشتر بر روی فهرستها
با حلقهها میتونی کارهای پیچیدهتری مثل فیلتر کردن یا تبدیل انجام بدی.
✨ مثال فیلتر کردن:
numbers = [1, 2, 3, 4]
evens = [num for num in numbers if num % 2 == 0]
print(evens) # Khoroji: [2, 4]
—-—-—-—-—-—-—-—-—-—-—
4️⃣ انجام کارهایی پس از حلقهی for
بعد از حلقه، میتونی نتایج رو جمعبندی کنی.
✨ مثال جمع و میانگین:
numbers = [1, 2, 3, 4]
total = sum(numbers)
print(f"Jame: {total}, Miyangin: {total / len(numbers)}")
# Khoroji: Jame: 10, Miyangin: 2.5
—-—-—-—-—-—-—-—-—-—-—
5️⃣ پیشگیری از خطاهای تورفتگی
🔸 تورفتگی فراموششده:
numbers = [1, 2, 3]
for num in numbers:
print(num) # IndentationError
✨ درست:
for num in numbers:
print(num)
🔸 فراموشی تورفتگی خطوط اضافی:
for num in numbers:
print(num)
print("Payan") # Bayad kharej az halghe bashe
🔸 تورفتگی غیرضروری:
numbers = [1, 2, 3]
print(numbers) # IndentationError
🔸 تورفتگی غیرضروری پس از حلقه:
for num in numbers:
print(num)
print("Ghalat!") # In to halghe-st
🔸 فراموشی دو نقطه (:):
for num in numbers # SyntaxError
print(num)
—-—-—-—-—-—-—-—-—-—-—
6️⃣ ساخت فهرستهای عددی
🔹 استفاده از range():
numbers = list(range(1, 6)) # [1, 2, 3, 4, 5]
print(numbers)
🔹 ساخت فهرست با ()range:
even_numbers = list(range(2, 11, 2)) # [2, 4, 6, 8, 10]
print(even_numbers)
🔹 آمار ساده با فهرست اعداد:
numbers = [3, 1, 4, 2]
print(f"Koochik: {min(numbers)}") # Khoroji: Koochik: 1
print(f"Bozorg: {max(numbers)}") # Khoroji: Bozorg: 4
print(f"Jame: {sum(numbers)}") # Khoroji: Jame: 10
print(f"Miyangin: {sum(numbers) / len(numbers)}") # Khoroji: Miyangin: 2.5
🔹 خلاصه فهرست:
cubes = [x**3 for x in range(1, 5)] # [1, 8, 27, 64]
print(cubes)
—-—-—-—-—-—-—-—-—-—-—
7️⃣ کار با بخشی از فهرست (برشها)
🔸 برش زدن:
numbers = [1, 2, 3, 4, 5]
print(numbers[1:4]) # Khoroji: [2, 3, 4]
print(numbers[::2]) # Khoroji: [1, 3, 5]
print(numbers[::-1]) # Khoroji: [5, 4, 3, 2, 1]
🔸 حرکت درون برش:
slice = numbers[1:4]
for num in slice:
print(num) # 2, 3, 4
numbers[1:4] = [20, 30, 40]
print(numbers) # Khoroji: [1, 20, 30, 40, 5]
🔸 نسخهبرداری:
fruits = ["sib", "moz"]
fruits_copy = fruits[:]
fruits_copy[0] = "portoghal"
print(fruits) # Khoroji: ["sib", "moz"]
print(fruits_copy) # Khoroji: ["portoghal", "moz"]
💯 @PythonForYou 🧑💻👩💻