📢 همهچیز درباره فهرستها (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 🧑💻👩💻