📢 همهچیز درباره فهرستها (Lists) + نکات حرفهای 🐍
در ادامه قراره غوغا کنیم و همهچیز درباره فهرستها (Lists) در پایتون رو یاد بگیریم! 😎
فهرستها یکی از پرکاربردترین ابزارهای پایتونن که تو هر پروژهای به کار میان. از تعریف ساده تا ترفندهای حرفهای و نکات ریز، همهچیز اینجاست! 🚀
بریم شروع کنیم!
💯 @PythonForYou 🧑💻👩💻
فهرست (List) چیه؟ 🤔
فهرست یه مجموعه مرتب از دادههاست که میتونه هر نوع دادهای (عدد، رشته، حتی فهرست دیگه!) رو نگه داره. فهرستها قابل تغییر (mutable) هستن، یعنی میتونی بعد از تعریف، اونا رو عوض کنی.
✅ سینتکس (نحوه تعریف):
my_list = [1, 2, "ali", True, 3.14]
# ya
empty_list = []
⬟〰️⬟〰️⬟〰️⬟〰️⬟
💡 ویژگیها:
- تو کروشه [] تعریف میشن.
- میتونی دادههای مختلف (int, str, bool, ...) رو باهم ذخیره کنی.
- ترتیب دارن (ایندکس از 0 شروع میشه).
- میتونی عناصر رو اضافه، حذف یا تغییر بدی.
💯 @PythonForYou 🧑💻👩💻
🟢 عملیات اصلی با فهرستها
⭐️ 1. دسترسی به عناصر (Indexing):
با ایندکس (شماره جایگاه) به عناصر دسترسی پیدا کن.
fruits = ["sib", "moz", "portoghal"]
print(fruits[0]) # Khoroji: sib
print(fruits[-1]) # Khoroji: portoghal (az akhar)
💡 نکته ریز:
✔️ ایندکس منفی برای دسترسی از آخر فهرست عالیه! مثلاً 1- یعنی آخرین عنصر.
✔️ اگه ایندکس اشتباه بدی (مثلاً fruits[10])، ارور IndexError میگیری.
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 2. برش (Slicing):
یه بخش از فهرست رو با [start:end:step] جدا کن.
numbers = [0, 1, 2, 3, 4, 5]
print(numbers[1:4]) # Khoroji: [1, 2, 3]
print(numbers[::2]) # Khoroji: [0, 2, 4] (har do adad yeki)
💡 نکته ریز:
✔️ اگه start یا end ندی، پایتون از اول یا تا آخر میره.
✔️و step منفی برای برعکس کردن فهرست:
print(numbers[::-1]) # Khoroji: [5, 4, 3, 2, 1, 0]
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 3. اضافه کردن عنصر:
🔸 append(): یه عنصر به آخر فهرست اضافه میکنه.
🔸 insert(): یه عنصر تو ایندکس خاص اضافه میکنه.
🔸 extend(): چندتا عنصر (یا فهرست دیگه) رو اضافه میکنه.
fruits = ["sib", "moz"]
fruits.append("portoghal") # ["sib", "moz", "portoghal"]
fruits.insert(1, "anar") # ["sib", "anar", "moz", "portoghal"]
fruits.extend(["angoor", "hendoone"]) # ["sib", "anar", "moz", "portoghal", "angoor", "hendoone"]
💡 نکته ریز:
- دقت کن که append یه عنصر رو کامل اضافه میکنه، حتی اگه خودش فهرست باشه:
fruits.append(["kivi", "narengi"]) # ["sib", "anar", ..., ["kivi", "narengi"]]
- برای اضافه کردن عناصر یه فهرست دیگه، از extend یا عملگر + استفاده کن.
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 4. حذف عنصر:
🔹 remove(): اولین نمونه از یه مقدار رو حذف میکنه.
🔹 pop(): عنصر با ایندکس مشخص (یا آخرین عنصر) رو حذف و برمیگردونه.
🔹 clear(): کل فهرست رو خالی میکنه.
fruits = ["sib", "moz", "sib"]
fruits.remove("sib") # ["moz", "sib"]
last_fruit = fruits.pop() # last_fruit = "sib", fruits = ["moz"]
fruits.clear() # fruits = []
💡 نکته ریز:
- اگه مقداری که میخوای با remove حذف کنی تو فهرست نباشه، ارور ValueError میگیره.
- برای جلوگیری از ارور، اول چک کن:
if "sib" in fruits:
fruits.remove("sib")
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 5. تغییر عنصر:
با ایندکس میتونی مقدار یه عنصر رو عوض کنی.
fruits = ["sib", "moz"]
fruits[1] = "anar" # ["sib", "anar"]
💯 @PythonForYou 🧑💻👩💻
🟣 نکات ریز و ترفندهای حرفهای
⭐️ 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 🧑💻👩💻