Homeداده کاویلیست در پایتون چیست؟ آموزش کامل List با مثال کاربردی تحلیل داده

لیست در پایتون چیست؟ آموزش کامل List با مثال کاربردی تحلیل داده

لیست در پایتون (Python List) یکی از پرکاربردترین ساختارهای داده برای نگهداری چند مقدار در یک متغیر است. اگر تازه برنامه‌نویسی را شروع کرده‌اید، احتمالاً برای ذخیره نام مشتریان، قیمت کالاها، نتایج آزمایش یا داده‌های روزانه به لیست نیاز پیدا می‌کنید. در این راهنما، ساختار لیست، اندیس‌گذاری، برش، تغییر داده، پیمایش، خطاهای رایج و کاربرد آن در یک سناریوی واقعی تحلیل فروش را مرحله‌به‌مرحله بررسی می‌کنیم.

لیست با کروشه ساخته می‌شود و اعضای آن با کاما از هم جدا می‌شوند. برخلاف tuple، لیست تغییرپذیر است؛ یعنی پس از ایجاد می‌توان عضوهای آن را اضافه، حذف یا ویرایش کرد. لیست می‌تواند خالی باشد، عضو تکراری داشته باشد و حتی مقادیر با نوع‌های متفاوت را در خود نگه دارد؛ بااین‌حال، در پروژه‌های واقعی بهتر است اعضای یک لیست تا حد امکان هم‌نوع و معنادار باشند.

ساخت لیست در Python

daily_sales = [120, 95, 140, 110]
regions = ["تهران", "شیراز", "تبریز"]
mixed = ["Python", 3, 2.5, True]
empty_list = []

نام‌گذاری روشن، خوانایی کد را بیشتر می‌کند. برای داده‌های جدولی بزرگ، لیست معمولاً لایه‌ای مقدماتی است و بهتر است بعداً از NumPy یا pandas استفاده کنید. راهنمای رسمی ساختارهای داده در Python جزئیات متدهای اصلی را مستند کرده است.

اندیس‌گذاری و دسترسی به اعضا

اندیس نخستین عضو از صفر شروع می‌شود. بنابراین در daily_sales، عبارت daily_sales[0] مقدار 120 و عبارت daily_sales[-1] آخرین مقدار، یعنی 110، را برمی‌گرداند. اندیس منفی از انتهای لیست شمارش می‌کند.

scores = [18, 15, 20, 17]
first = scores[0]       # 18
last = scores[-1]       # 17
count = len(scores)     # 4

اگر اندیس خارج از محدوده باشد، Python خطای IndexError می‌دهد. برای جلوگیری از آن، پیش از دسترسی طول لیست را بررسی کنید یا از الگوهایی مانند if items: برای تشخیص خالی نبودن استفاده کنید.

برش (Slicing)؛ انتخاب بخشی از لیست

ساختار عمومی برش items[start:stop:step] است. اندیس stop در نتیجه وارد نمی‌شود.

numbers = [0, 1, 2, 3, 4, 5]
numbers[1:4]   # [1, 2, 3]
numbers[:3]    # [0, 1, 2]
numbers[::2]   # [0, 2, 4]
numbers[::-1]  # معکوس لیست

افزودن و تغییر اعضا

برای افزودن یک عضو در انتها از append() و برای افزودن چند عضو از extend() استفاده کنید. متد insert(index, value) عضو را در جای مشخص وارد می‌کند. این متدها خود لیست را تغییر می‌دهند و معمولاً مقدار جدیدی برنمی‌گردانند.

tasks = ["پاک‌سازی داده"]
tasks.append("رسم نمودار")
tasks.extend(["گزارش‌نویسی", "ذخیره نتیجه"])
tasks.insert(0, "دریافت داده")
tasks[1] = "پاک‌سازی اولیه"

تفاوت مهم append() و extend() این است که append یک شیء را به‌عنوان یک عضو اضافه می‌کند، اما extend اعضای یک iterable را جداگانه وارد می‌کند:

a = [1, 2]
a.append([3, 4])   # [1, 2, [3, 4]]

b = [1, 2]
b.extend([3, 4])   # [1, 2, 3, 4]

حذف اعضا و مدیریت ایمن خطا

del با اندیس حذف می‌کند، pop() عضو را حذف و همان مقدار را برمی‌گرداند، و remove() نخستین رخداد یک مقدار را حذف می‌کند. اگر مقدار موردنظر در لیست نباشد، remove خطای ValueError می‌دهد؛ پس در داده‌های نامطمئن ابتدا وجود آن را بررسی کنید.

items = ["A", "B", "C", "B"]
items.remove("B")     # فقط نخستین B حذف می‌شود
last_item = items.pop()
del items[0]

جست‌وجو، شمارش و مرتب‌سازی

عملگر in وجود یک مقدار را بررسی می‌کند. متدهای count() و index() به‌ترتیب تعداد تکرار و جایگاه نخستین رخداد را می‌دهند. sort() لیست را درجا مرتب می‌کند؛ درحالی‌که sorted() یک لیست جدید می‌سازد و داده اولیه را دست‌نخورده نگه می‌دارد.

prices = [120, 95, 140, 110]
if 95 in prices:
    print("قیمت ثبت شده است")

ascending = sorted(prices)
descending = sorted(prices, reverse=True)
prices.sort()

پیمایش لیست و list comprehension

for region in regions:
    print(region)

expensive = [price for price in prices if price >= 120]
labels = ["بالا" if p >= 120 else "عادی" for p in prices]

List comprehension برای تبدیل یا فیلترهای کوتاه خواناست؛ اما اگر منطق شرطی طولانی شد، یک حلقه معمولی یا تابع مستقل، قابل‌فهم‌تر و قابل‌آزمون‌تر است.

سناریوی واقعی: تحلیل فروش چهار شعبه

فرض کنید یک فروشگاه آنلاین فروش روزانه چهار شعبه را در یک لیست ذخیره کرده است. هدف مدیر، محاسبه مجموع و میانگین فروش، پیدا کردن شعبه‌های بالاتر از هدف 120 میلیون تومان و آماده‌سازی یک گزارش ساده است. داده نمونه در این مثال فرضی است، اما روش محاسبه با Python واقعی و قابل اجراست.

branches = ["تهران", "شیراز", "تبریز", "رشت"]
sales_million = [135, 98, 121, 110]
target = 120

total = sum(sales_million)
average = total / len(sales_million)
above_target = [
    branches[i]
    for i, value in enumerate(sales_million)
    if value >= target
]

print(total)         # 464
print(average)      # 116.0
print(above_target) # ["تهران", "تبریز"]

در این نمونه، مجموع فروش 464 میلیون تومان و میانگین 116 میلیون تومان است. دو شعبه به هدف 120 میلیون تومان رسیده‌اند یا از آن عبور کرده‌اند. enumerate() هم‌زمان اندیس و مقدار را می‌دهد و از مدیریت دستی شمارنده جلوگیری می‌کند. اگر داده‌ها از فایل CSV یا Excel آمده باشند، pandas برای فیلتر و گروه‌بندی داده‌های جدولی انتخاب مناسب‌تری است؛ برای شروع می‌توانید به مقالات تحلیل داده آکادمی تک و ابزار کامپایلر آنلاین آکادمی تک مراجعه کنید.

کپی سطحی و تفاوت «همان شیء» با «کپی»

وقتی یک لیست را با b = a به متغیر دیگری نسبت می‌دهید، هر دو نام به همان شیء اشاره می‌کنند. در نتیجه تغییر b روی a نیز اثر می‌گذارد. برای کپی سطحی از a.copy() یا list(a) استفاده کنید. اگر لیست تو‌در‌تو دارید، برای جداسازی کامل ساختارهای داخلی به copy.deepcopy() نیاز است.

a = [1, 2]
b = a
b.append(3)       # a هم تغییر می‌کند

c = a.copy()
c.append(4)       # a تغییر نمی‌کند

خطاهای رایج در کار با List

  • فراموش کردن اینکه اندیس از صفر شروع می‌شود.
  • دسترسی به عضو لیست خالی یا اندیس خارج از محدوده.
  • تغییر دادن لیست هنگام پیمایش همان لیست؛ برای فیلتر، لیست جدید بسازید.
  • اشتباه گرفتن append با extend و ایجاد لیست تو‌در‌تو ناخواسته.
  • مرتب‌سازی با sort و انتظار دریافت یک لیست جدید؛ sort مقدار None برمی‌گرداند.
  • محاسبه میانگین بدون بررسی خالی نبودن لیست یا عددی بودن اعضا.

List، Tuple، Set و DataFrame چه تفاوتی دارند؟

برای داده مرتب و قابل‌تغییر، List انتخاب پایه است. Tuple برای داده مرتب و تغییرناپذیر مناسب است. Set اعضای یکتا را نگه می‌دارد و برای آزمون عضویت و حذف تکراری‌ها کاربرد دارد. DataFrame در pandas برای داده جدولی، ستون‌های نام‌دار، مقدارهای گمشده و عملیات گروهی طراحی شده است. برای محاسبات عددی برداری نیز راهنمای رسمی NumPy نقطه شروع مناسبی است و برای آشنایی سریع با DataFrame می‌توانید راهنمای ۱۰ دقیقه‌ای pandas را بخوانید.

پرسش‌های متداول

آیا List مقدار تکراری می‌پذیرد؟

بله. لیست ترتیب اعضا را حفظ می‌کند و می‌تواند مقدارهای تکراری داشته باشد.

آیا لیست فقط عدد ذخیره می‌کند؟

خیر. Python از انواع مختلف پشتیبانی می‌کند؛ بااین‌حال، هم‌نوع بودن داده‌ها معمولاً محاسبه و نگهداری را ساده‌تر می‌کند.

برای داده‌های بزرگ، List کافی است؟

برای نمونه‌های کوچک و منطق عمومی مناسب است. برای محاسبات برداری NumPy و برای جدول‌های واقعی pandas معمولاً کاراتر و خواناتر هستند.

چطور از خطای IndexError جلوگیری کنم؟

طول لیست را با len() بررسی کنید، از اندیس معتبر استفاده کنید و در صورت نیاز دسترسی را داخل شرط یا try/except کنترل کنید.

جمع‌بندی

لیست در پایتون یک ابزار پایه، انعطاف‌پذیر و ضروری برای ذخیره و پردازش دنباله‌ای از داده‌هاست. با تسلط بر اندیس‌گذاری، slicing، append، extend، حذف، مرتب‌سازی و list comprehension می‌توانید بخش بزرگی از کارهای روزمره را انجام دهید. در پروژه تحلیل داده، زمانی که داده‌ها از حالت چند مقدار ساده خارج می‌شوند، آن‌ها را به ساختارهای تخصصی‌تر مانند NumPy array یا pandas DataFrame منتقل کنید. این انتخاب، کد را دقیق‌تر، مقیاس‌پذیرتر و قابل نگهداری‌تر می‌کند.

منابع و مطالعه بیشتر: درباره محدودیت ابزارهای تشخیص متن هوش مصنوعی و نشانه‌های نثر ماشینی در ویرایش متن. این منابع برای ویرایش انسانی و ارزیابی کیفیت نوشته بررسی شدند؛ تشخیص خودکار به‌تنهایی معیار قابل اتکایی برای قضاوت درباره نویسنده یا کیفیت محتوا نیست.

Share: 

No comments yet! You be the first to comment.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *