🟣 نکات ریز و ترفندهای حرفهای
⭐️ 1. بررسی وجود عنصر با in:
برای چک کردن اینکه یه مقدار تو فهرست هست یا نه، از in استفاده کن.
fruits = ["sib", "moz", "portoghal"]
if "moz" in fruits:
print("Moz darim! 🍌")
💡 نکته ریز:
- دقت کن in برای فهرستهای بزرگ ممکنه کند باشه. اگه نیاز به سرعت داری، از set به جای list استفاده کن.
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 2. کپی کردن فهرست:
اگه مستقیم یه فهرست رو به متغیر جدید بدی، کپی نمیشه، بلکه فقط ارجاع میکنه!
original = [1, 2, 3]
bad_copy = original
bad_copy[0] = 99 # original ham taghir mikone! [99, 2, 3]
✅ راه درست:
از ()copy یا برش کامل [:] استفاده کن:
original = [1, 2, 3]
good_copy = original.copy() # ya: original[:]
good_copy[0] = 99 # original: [1, 2, 3], good_copy: [99, 2, 3]
💡 نکته ریز:
- اگه فهرستت شامل فهرستهای دیگهست (فهرست تودرتو)، از deepcopy تو ماژول copy استفاده کن:
from copy import deepcopy
nested = [[1, 2], [3, 4]]
deep_copy = deepcopy(nested)
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 3. مرتبسازی فهرست:
🔸 sort(): فهرست رو بهصورت مستقیم مرتب میکنه (تغییر درجا).
🔸 sorted(): یه فهرست جدید مرتبشده برمیگردونه.
numbers = [3, 1, 4, 2]
numbers.sort() # numbers: [1, 2, 3, 4]
sorted_numbers = sorted([3, 1, 4, 2]) # sorted_numbers: [1, 2, 3, 4]
💡 نکته ریز:
- برای مرتبسازی برعکس، از reverse=True استفاده کن:
numbers.sort(reverse=True) # [4, 3, 2, 1]
- برای مرتبسازی فهرست رشتهها یا اشیاء پیچیده، از پارامتر key استفاده کن:
names = ["Ali", "zahra", "Babak"]
names.sort(key=str.lower) # ["Ali", "Babak", "zahra"]
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 4. فهرستهای تودرتو (Nested Lists):
فهرستها میتونن شامل فهرستهای دیگه باشن، مثل ماتریس.
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix[1][2]) # Khoroji: 6
💡 نکته ریز:
- برای دسترسی به عناصر تودرتو، مراقب ایندکسها باش تا IndexError نگیری.
- برای حلقه زدن تو فهرست تودرتو:
for row in matrix:
for item crusade
print(item, end=" ") # 1 2 3 4 5 6 7 8 9
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 5. ترکیب فشرده (List Comprehension):
به جای حلقههای طولانی، از List Comprehension برای کد کوتاه و سریع استفاده کن.
numbers = [1, 2, 3, 4]
squares = [x**2 for x in numbers] # [1, 4, 9, 16]
💡 نکته ریز:
- میتونی شرط هم اضافه کنی:
even_squares = [x**2 for x in numbers if x % 2 == 0] # [4, 16]
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 6. بررسی خالی بودن فهرست:
برای چک کردن خالی بودن، از if not list استفاده کن.
my_list = []
if not my_list:
print("List khalie! 📭")
💡 نکته ریز:
- این روش برای هر شیء خالیشدنی (مثل رشته یا دیکشنری) هم کار میکنه.
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 7. شمارش و تعداد با count و len:
🔹 len: تعداد عناصر فهرست.
🔹 count: تعداد دفعات یه مقدار خاص.
fruits = ["sib", "moz", "sib"]
print(len(fruits)) # Khoroji: 3
print(fruits.count("sib")) # Khoroji: 2
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 8. معکوس کردن فهرست:
از ()reverse یا برش [1-::] برای معکوس کردن استفاده کن.
numbers = [1, 2, 3]
numbers.reverse() # [3, 2, 1]
# ya
numbers = numbers[::-1]
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 9. ترکیب فهرستها با + یا extend:
دو فهرست رو میتونی باهم ترکیب کنی:
list1 = [1, 2]
list2 = [3, 4]
combined = list1 + list2 # [1, 2, 3, 4]
# ya
list1.extend(list2)
💡 نکته ریز:
- دقت کن که + یه فهرست جدید میسازه، ولی extend فهرست اول رو تغییر میده (بهینهتر برای فهرستهای بزرگ).
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 10. مدیریت خطا با try-except:
موقع کار با ایندکسها، ممکنه ارور بگیری. از try-except استفاده کن:
try:
print(fruits[10])
except IndexError:
print("Indeks na-mojood! 🚫")
💯 @PythonForYou 🧑💻👩💻
🔴 نکات حرفهای برای کار با فهرستها
🔸 بهینهسازی حافظه: برای فهرستهای خیلی بزرگ، از ژنراتورها یا numpy به جای فهرست استفاده کن.
🔹 خوانایی: اسمهای معنیدار برای فهرستها انتخاب کن (مثل scores به جای x).
🔸 تکرارها: اگه یه عنصر چندین بار تو فهرست هست و فقط یکی رو میخوای، از set استفاده کن:
unique_fruits = list(set(["sib", "moz", "sib"])) # ["sib", "moz"]
🔹 بررسی نوع دادهها: تو فهرستهای مخلوط، نوع داده رو با isinstance چک کن:
mixed = [1, "sib", 3.14]
for item in mixed:
if isinstance(item, str):
print(f"String: {item}")
💯 @PythonForYou 🧑💻👩💻
📢 مقایسه کامل متدهای حذف در فهرستها (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 🧑💻👩💻