لیست در پایتون چیست و چگونه از آن استفاده کنیم؟

الگوریتم | برنامه نویسی
لیست ها یکی از مهم ترین و پرکاربردترین ساختارهای داده در پایتون هستند که به شما امکان می دهند مجموعه ای از آیتم ها را به صورت مرتب و قابل تغییر ذخیره کنید. در این مقاله به طور جامع با مفهوم لیست، نحوه ایجاد، دسترسی، تغییر و مدیریت آن آشنا می شوید.

🎯 پاسخ سریع

لیست در پایتون یک ساختار داده مرتب و قابل تغییر است که می تواند مجموعه ای از آیتم ها با انواع داده مختلف را در خود نگه دارد و با استفاده از براکت `[]` تعریف می شود.

📌 نکات کلیدی

• لیست ها (Lists) در پایتون از نوع داده های ترکیبی و مرتب هستند   • لیست ها تغییرپذیر (Mutable) هستند   • می توانند شامل انواع داده های مختلف باشند   • ایندکس گذاری از صفر شروع می شود   • برش زنی (Slicing) امکان دسترسی به زیرمجموعه ای از لیست را می دهد

🔍 لیست در پایتون چیست؟

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

لیست ها با استفاده از براکت های مربع `[]` تعریف می شوند و عناصر آن ها با ویرگول از یکدیگر جدا می شوند. به عنوان مثال، `[1, hello, 3.14]` یک لیست معتبر در پایتون است. درک مفهوم لیست برای هر برنامه نویس پایتون حیاتی است، زیرا پایه ای برای بسیاری از عملیات های پردازش داده و الگوریتم های پیچیده تر است.

الگوریتم | برنامه نویسی

✨ ویژگی های کلیدی لیست در پایتون

لیست ها در پایتون دارای چند ویژگی منحصر به فرد هستند که آن ها را از سایر ساختارهای داده متمایز می کند و درک این ویژگی ها برای استفاده بهینه از آن ها ضروری است.

🧭

مرتب بودن (Ordered) ترتیب قرارگیری آیتم ها حفظ می شود.

تغییرپذیری (Mutable) عناصر لیست پس از ایجاد قابل تغییرند.

ذخیره انواع داده مختلف لیست می تواند شامل هر نوع داده ای باشد.

🛠️ شروع کار: نحوه تعریف لیست و لیست های تو در تو

برای شروع کار با لیست ها، ابتدا باید نحوه تعریف آن ها را بیاموزیم. ایجاد یک لیست در پایتون بسیار ساده است و فقط کافی است آیتم های مورد نظر را درون براکت های `[]` قرار دهید.

تعریف یک لیست ساده

لیست ها می توانند خالی باشند یا شامل یک یا چند آیتم باشند. هر آیتم می تواند از هر نوع داده ای باشد.


# لیست خالی
my_empty_list = []
print(my_empty_list) # خروجی: []

# لیست اعداد صحیح
numbers = [1, 2, 3, 4, 5]
print(numbers) # خروجی: [1, 2, 3, 4, 5]

# لیست رشته ها
fruits = [apple, banana, cherry]
print(fruits) # خروجی: ['apple', 'banana', 'cherry']

# لیست با انواع داده مختلف
mixed_list = [1, hello, True, 3.14]
print(mixed_list) # خروجی: [1, 'hello', True, 3.14]

لیست های تو در تو (Nested Lists)

پایتون به شما اجازه می دهد که لیستی را درون لیست دیگری قرار دهید. این قابلیت به شما امکان می دهد ساختارهای داده پیچیده تر، مانند ماتریس ها یا جداول، را ایجاد کنید.


# لیست تو در تو
nested_list = [1, 2, [a, b], 4]
print(nested_list) # خروجی: [1, 2, ['a', 'b'], 4]

# ماتریس
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix) # خروجی: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

⚙️ دسترسی به داده ها: ایندکس گذاری مثبت و منفی

پس از ایجاد یک لیست، مهم است که بدانید چگونه به عناصر آن دسترسی پیدا کنید. پایتون دو روش اصلی برای ایندکس گذاری ارائه می دهد: ایندکس گذاری مثبت (از ابتدا) و ایندکس گذاری منفی (از انتها).

1️⃣

ایندکس 0اولین عنصر

2️⃣

ایندکس مثبتاز چپ به راست

3️⃣

ایندکس -1آخرین عنصر

4️⃣

ایندکس منفیاز راست به چپ

ایندکس گذاری مثبت

در پایتون، ایندکس گذاری از عدد 0 شروع می شود. یعنی اولین عنصر لیست دارای ایندکس 0، دومین عنصر دارای ایندکس 1 و الی آخر است.


my_list = ['p', 'y', 't', 'h', 'o', 'n']
print(my_list[0]) # خروجی: p (اولین عنصر)
print(my_list[3]) # خروجی: h (چهارمین عنصر)

ایندکس گذاری منفی

ایندکس گذاری منفی به شما امکان می دهد از انتهای لیست به عناصر دسترسی پیدا کنید. ایندکس `-1` به آخرین عنصر، `-2` به عنصر یکی مانده به آخر و به همین ترتیب اشاره دارد.


my_list = ['p', 'y', 't', 'h', 'o', 'n']
print(my_list[-1]) # خروجی: n (آخرین عنصر)
print(my_list[-3]) # خروجی: h (سومین عنصر از آخر)

💡 نکته تخصصی

تلاش برای دسترسی به ایندکسی که وجود ندارد، منجر به خطای `IndexError` می شود. همچنین، ایندکس باید یک عدد صحیح باشد؛ استفاده از انواع دیگر داده، خطای `TypeError` را در پی دارد.

✂️ برش زنی (Slicing): تکنیک های حرفه ای برای دسترسی به بازه های لیست

برش زنی (Slicing) یک قابلیت بسیار قدرتمند در پایتون است که به شما اجازه می دهد زیرمجموعه ای از یک لیست را با تعیین یک بازه استخراج کنید. این کار با استفاده از عملگر دونقطه `:` انجام می شود.

مبانی برش زنی

ساختار کلی برش زنی به صورت `[start:end:step]` است. `start` ایندکس شروع (شامل می شود)، `end` ایندکس پایان (شامل نمی شود) و `step` گام حرکت (پیش فرض 1) را مشخص می کند.


my_list = ['p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z']

# از ایندکس 2 تا 5 (شامل 2، 3، 4)
print(my_list[2:5]) # خروجی: ['o', 'g', 'r']

# از ابتدا تا ایندکس 4 (شامل 0، 1، 2، 3)
print(my_list[:4]) # خروجی: ['p', 'r', 'o', 'g']

# از ایندکس 5 تا انتها
print(my_list[5:]) # خروجی: ['a', 'm', 'i', 'z']

# کل لیست
print(my_list[:]) # خروجی: ['p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z']

برش زنی با گام (Step)

می توانید با تعیین `step`، عناصری را با فواصل مشخص انتخاب کنید.


my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# هر دو عنصر یک بار
print(my_list[::2]) # خروجی: [0, 2, 4, 6, 8]

# معکوس کردن لیست
print(my_list[::-1]) # خروجی: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

✏️ تغییر و مدیریت لیست: نحوه اضافه کردن، حذف و به روزرسانی عناصر

یکی از نقاط قوت لیست ها، تغییرپذیری آن هاست. این بدین معناست که پس از ایجاد یک لیست، می توانید عناصر آن را تغییر دهید، اضافه کنید یا حذف نمایید.

تغییر عناصر لیست

می توانید با استفاده از ایندکس، مقدار یک عنصر خاص را تغییر دهید.


fruits = [apple, banana, cherry]
fruits[1] = orange
print(fruits) # خروجی: ['apple', 'orange', 'cherry']

اضافه کردن عناصر به لیست

چندین روش برای اضافه کردن عناصر به لیست وجود دارد:

📋 متدهای اضافه کردن

  • `append()`: یک عنصر را به انتهای لیست اضافه می کند.
  • `insert(index, item)`: یک عنصر را در ایندکس مشخص شده اضافه می کند.
  • `extend(iterable)`: عناصر یک `iterable` (مانند لیست دیگر) را به انتهای لیست فعلی اضافه می کند.

my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # خروجی: [1, 2, 3, 4]

my_list.insert(1, 1.5)
print(my_list) # خروجی: [1, 1.5, 2, 3, 4]

another_list = [5, 6]
my_list.extend(another_list)
print(my_list) # خروجی: [1, 1.5, 2, 3, 4, 5, 6]

حذف عناصر از لیست

برای حذف عناصر نیز چندین متد وجود دارد:

📋 متدهای حذف کردن

  • `remove(item)`: اولین رخداد یک آیتم مشخص را حذف می کند.
  • `pop(index)`: عنصر را در ایندکس مشخص شده حذف و برمی گرداند (اگر ایندکس داده نشود، آخرین عنصر).
  • `del list[index]`: عنصر را در ایندکس مشخص شده حذف می کند.
  • `clear()`: تمام عناصر لیست را حذف می کند.

my_list = [1, 2, 3, 2, 4]
my_list.remove(2) # فقط اولین 2 را حذف می کند
print(my_list) # خروجی: [1, 3, 2, 4]

popped_item = my_list.pop(1) # حذف عنصر با ایندکس 1 (عدد 3)
print(my_list) # خروجی: [1, 2, 4]
print(popped_item) # خروجی: 3

del my_list[0] # حذف عنصر با ایندکس 0 (عدد 1)
print(my_list) # خروجی: [2, 4]

my_list.clear()
print(my_list) # خروجی: []

🔧 متدهای پرکاربرد لیست در پایتون

پایتون متدهای داخلی بسیاری برای کار با لیست ها فراهم کرده است که عملیات های رایج را آسان تر می کنند. در اینجا به برخی از مهم ترین آن ها می پردازیم.

📋 متدهای مهم لیست

  • `count(item)`: تعداد رخدادهای یک آیتم را برمی گرداند.
  • `index(item)`: ایندکس اولین رخداد یک آیتم را برمی گرداند.
  • `sort()`: لیست را به صورت درجا مرتب می کند.
  • `reverse()`: ترتیب عناصر لیست را به صورت درجا معکوس می کند.
  • `copy()`: یک کپی سطحی از لیست را برمی گرداند.

my_list = [1, 2, 3, 2, 5, 1]

print(my_list.count(2)) # خروجی: 2
print(my_list.index(3)) # خروجی: 2

my_list.sort()
print(my_list) # خروجی: [1, 1, 2, 2, 3, 5]

my_list.reverse()
print(my_list) # خروجی: [5, 3, 2, 2, 1, 1]

new_list = my_list.copy()
print(new_list) # خروجی: [5, 3, 2, 2, 1, 1]

الگوریتم | برنامه نویسی

🚀 تکنیک های پیشرفته: List Comprehension و کاربرد آن

List Comprehension یک راه کوتاه و کارآمد برای ایجاد لیست های جدید بر اساس لیست های موجود است. این تکنیک نه تنها کد شما را خواناتر می کند، بلکه معمولا سریع تر از حلقه های `for` سنتی عمل می کند.

ساختار List Comprehension

ساختار کلی آن به صورت `[expression for item in iterable if condition]` است.


# ایجاد لیستی از مربع اعداد
squares = [x2 for x in range(10)]
print(squares) # خروجی: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# ایجاد لیستی از اعداد زوج
even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers) # خروجی: [0, 2, 4, 6, 8]

# لیست تو در تو با List Comprehension
matrix = [[j for j in range(3)] for i in range(3)]
print(matrix) # خروجی: [[0, 1, 2], [0, 1, 2], [0, 1, 2]]

💡 بینش

استفاده از List Comprehension به جای حلقه های سنتی `for` در بسیاری از موارد باعث بهبود عملکرد و خوانایی کد می شود، به خصوص در پردازش داده های بزرگ.

⚖️ بهترین عملکرد: چه زمانی از لیست استفاده کنیم؟

با وجود انواع مختلف ساختارهای داده در پایتون، انتخاب صحیح برای هر سناریو اهمیت دارد. لیست ها زمانی بهترین گزینه هستند که نیاز به مجموعه ای مرتب و قابل تغییر از آیتم ها دارید.

✅ مزایای لیست

انعطاف پذیری بالا، قابلیت تغییر، دسترسی سریع با ایندکس.

⚠️ محدودیت های لیست

مصرف حافظه بیشتر نسبت به تاپل، عدم ایمنی در برابر تغییرات ناخواسته.

مقایسه با تاپل (Tuple) و ست (Set)

ویژگی لیست (List) تاپل (Tuple) ست (Set)
مرتب بودن
تغییرپذیری
تکرار عناصر
کاربرد اصلی مجموعه پویا مجموعه ثابت مجموعه منحصر به فرد

❓ تفاوت اصلی بین لیست (List) و تاپل (Tuple) در پایتون چیست؟

تفاوت اصلی در تغییرپذیری آن هاست. لیست ها (با `[]`) تغییرپذیر (mutable) هستند، یعنی می توان عناصر آن ها را پس از ایجاد تغییر داد. اما تاپل ها (با `()`) تغییرناپذیر (immutable) هستند و پس از ایجاد نمی توان عناصرشان را تغییر داد.

❓ آیا می توان در یک لیست، داده هایی با انواع مختلف ذخیره کرد؟

بله، یکی از ویژگی های قدرتمند لیست ها در پایتون این است که می توانند شامل انواع داده های مختلف (مانند اعداد صحیح، رشته ها، مقادیر بولی، حتی لیست های دیگر) در کنار هم باشند.

❓ بهترین روش برای حذف یک آیتم خاص از لیست چیست؟

اگر می خواهید اولین رخداد یک آیتم مشخص را حذف کنید، از متد `remove()` استفاده کنید. اگر می خواهید آیتم را با استفاده از ایندکس آن حذف کنید و شاید به آن آیتم حذف شده نیاز داشته باشید، از متد `pop()` استفاده کنید. اگر فقط می خواهید آیتم را با ایندکس حذف کنید و نیازی به آن ندارید، از `del` استفاده کنید.

❓ منظور از تغییرپذیری (Mutable) در لیست های پایتون چیست؟

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

❓ چگونه می توان لیست ها را در پایتون با سرعت بالا مرتب کرد؟

برای مرتب سازی درجا (in-place) یک لیست، از متد `sort()` لیست استفاده کنید. اگر نیاز به یک لیست مرتب شده جدید دارید و نمی خواهید لیست اصلی تغییر کند، از تابع توکار `sorted()` استفاده کنید.

📌 جمع بندی

در آموزش پایتون لیست ها ابزاری قدرتمند و انعطاف پذیر برای ذخیره و مدیریت مجموعه ای از داده ها هستند. با درک دقیق ویژگی هایی مانند مرتب بودن و تغییرپذیری، و همچنین تسلط بر متدهای اصلی و تکنیک هایی مانند List Comprehension، می توانید کدهای پایتون کارآمدتر و خواناتری بنویسید. این دانش، پایه ای محکم برای پیشرفت شما در مسیر برنامه نویسی پایتون و حل مسائل پیچیده تر خواهد بود.

✅ آماده اید تا مهارت های پایتون خود را به سطح بعدی ببرید؟

برای آشنایی بیشتر با سایر ساختارهای داده و تکنیک های برنامه نویسی، مقالات دیگر ما را مطالعه کنید.

مقالات بیشتر را ببینید