لیست در پایتون چیست؟ – نحوه کار با آن به زبان ساده – فرادرس

لیست در پایتون چیست؟ – نحوه کار با آن به زبان ساده – فرادرس


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

فهرست مطالب این نوشته

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

لیست‌های پایتون، مجموعه‌ای «قابل تغییر» از عناصر – یا آیتم‌های – گوناگون هستند که تحت نام متغیری واحد ذخیره می‌شوند. منظور از «قابل تغییر بودن» در اینجا، به این معناست که عناصر موجود در لیست را می‌توان هنگام اجرای برنامه، تغییر داد. همچنین، هر زمان که لازم بود می‌توانیم عناصری را از لیست، حذف کنیم یا موارد جدیدی را به آن اضافه کنیم.

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

«لیست‌ها» (Lists) یکی از پرکاربردترین ساختمان داده‌های تعبیه‌شده درون زبان پایتون هستند. برای ایجاد لیست در پایتون کافی است عناصر یا آیتم‌های مورد نظر را درون برکت‌های باز و بسته ( )

 قرار داده و آن‌ها را با کاما ,

 از هم جدا کنیم. لیست‌های پایتون می‌توانند شامل هر نوع «شیئی» (Object) باشند و این ویژگی، باعث سودمندی آن‌ها می‌شود. ضمن اینکه در مواقع متعددی در پروژه‌هایمان قابل استفاده هستند.

به‌طور مثال دستور زیر، لیستی به‌نام num_list

 حاوی اعداد ۱ تا ۵ را ایجاد می‌کند.

1num_list = (1, 2, 3, 4, 5)

خصوصیات لیست در پایتون چیست؟‌‌‌

خصوصیات اصلی لیست‌ها در پایتون را در ادامه آورده‌ایم.

  • «تغییرپذیری» (Mutable)
  • «مرتب بودن» (Ordered)
  • پویا یا «داینامیک بودن» (Dynamic)
  • از نوع آرایه یا «دنباله‌ای بودن» (Sequence)

در ادامه، این خصوصیت را توضیح داده‌ایم.

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

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

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

ترتیبی که هنگام تعریف لیست برای آیتم‌های درون آن مشخص می‌شود، در ادامه نیز حفظ می‌شوند. بنابراین، لیست‌ها ساختمان داده‌ای مرتب هستند.

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

در زمان اجرا می‌توان آیتم‌های مورد نظر را به List-ها اضافه یا از آن حذف کنیم. لیست‌ها به‌طور کلی، اشیای با اندازه ثابت نیستند. به‌همین دلیل ساختمان داده‌هایی داینامنیک نامیده می‌شوند.

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

هرچند که لیست‌های پایتون همچون آرایه‌های C++‎ یا جاوا، محدود و دارای اندازه ثابت نیستند. با این حال هنوز هم ساختمان داده‌ای از نوع آرایه محسوب می‌شوند که عناصر آن‌ها به‌صورت متوالی در حافظه ذخیره می‌شوند و به‌وسیله شماره Index که بیان‌گر بلوک حافظه برای عنصری خاص است، قابل دسترسی هستند.

نکته دیگری که در مورد لیست‌های پایتون وجود دارد این است که شی لیست می‌تواند شامل عناصر تکراری نیز باشد.

نحوه ایجاد لیست در پایتون چیست؟

برای ساختن یک لیست در پایتون چندین روش پیشِ رو داریم که در ادامه آورده‌ایم.

  • استفاده از براکت مانند آنچه در ادامه آورده‌ایم.
1num_list = (1, 2, 3, 4, 5)
  • به‌کارگیری متد سازنده list()

     مانند دستوری که در زیر بیان شده است.

1my_list = list((1, 2, 3))
  • استفاده از List Comprehensions به‌صورتی که در ادامه نوشته شده است.
1my_list = (x for x in range(5))

در یکی از مطالب پیشین مجله فرادرس به توضیح List Comprehensions پرداخته‌ایم.

نحوه دسترسی به عناصر لیست در پایتون چیست؟

برای دسترسی به عناصر موجود در یک لیست، می‌بایست از شاخص‌دهی یا همان Indexing استفاده کنیم. توجه داشته باشید که ایندکس‌ها در پایتون از صفر شروع می‌شوند. یعنی اولین خانه لیست، دارای ایندکس – یا شماره – صفر است.

به قطعه کدی که در ادامه آورده‌ایم توجه کنید.

1my_list = (10, 20, 30, 40, 50)
2first_element = my_list(0)  # Access the first element (10)

نحوه تغییر لیست در پایتون چیست؟

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

1my_list(2) = 99  # Modifies the third element to 99
2my_list.append(60)  # Adds 60 to the end of the list
3my_list.remove(20)  # Removes the first occurrence of 20

عملیات رایج روی لیست در پایتون چیست؟

پایتون عملیات‌های متعددی را برای کار با لیست‌ها برایمان فراهم کرده است که در ادامه این موارد را بیان کرده‌ایم.

عمل «الحاق» (Concatenation): به چسباندن لیست‌ها به‌هم با استفاده از عملگر +

 گفته می‌شود.

عمل «تکرار» (Repetition): به تکرار لیست‌ها با استفاده از عملگر *

می‌پردازد.

عمل «عضویت» (Membership): برای بررسی اینکه آیتمی خاص در یک لیست وجود دارد، in

 را به‌کار می‌برند.

List Comprehensions در پایتون چیست؟

List Comprehensions در واقع راه کوتاه‌تری برای ایجاد لیست‌ها بر اساس دنباله موجود، فراهم می‌کنند. این روش ضمن بهینه‌سازی کدهایمان، خوانایی آن را نیز افزایش می‌دهد.

به‌طور مثال، به کدی که در ادامه آورده‌ایم، توجه کنید.

1squares = (x**2 for x in range(1, 6))

در این کد، لیستی از مربعات را ایجاد می‌کنیم.

عمل Slicing و Indexing در پایتون چیست؟

«برش» (Slicing) به ما امکان می‌دهد تا بخشی از یک لیست را از آن بیرون بکشیم. برای انجام این عمل از سینتکس start:stop:step

 استفاده می‌کنیم. به مثالی که در ادامه آورده‌ایم، توجه کنید.

1my_list = (1, 2, 3, 4, 5)
2subset = my_list(1:4)  # Returns (2, 3, 4)

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

عناصر موجود در لیست‌های پایتون، خود می‌توانند یک لیست باشند. در این صورت ساختاری سلسله مراتبی ایجاد می‌شود که به لیست‌های تو در تو شناخته می‌شوند. برای دسترسی به عناصر موجود در این لیست‌ها از اندیس‌های چندتایی استفاده می‌کنیم.

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

پایتون، متد‌های «درونی» (Built-in) متعددی را برای دستکاری لیست‌ها فراهم کرده است. در ادامه، برخی از این متدها را آورده‌ایم.

  • متد append()

     ‎

  • متد extend()

     ‎

  • متد insert()

     ‎

  • متد pop()‎
  • متد remove()

     ‎

  • متد sort()

     ‎

به یاد داشتن متدهای گفته شده، در به‌کارگیری موثر این ساختمان داده پایتونی بسیار مهم است.

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

با استفاده از متد append می‌توانیم عنصر جدیدی را به لیست موجود اضافه کنیم. کدهای آورده شده در زیر را در نظر بگیرید.

1programming_languages = ("Python", "Java", "C++")
2programming_languages.append("JavaScript")

با اجرای این کد، مقدار جدید JavaScript

 به لیست programming_languages

 اضافه می‌شود و لیست نهایی برابر با (“Python”, “Java”, “C++”, “JavaScript”)

 خواهد بود.

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

برای افزودن محتویات یک لیست به لیستی دیگر می‌توانیم از متد extend()

استفاده کنیم. برای نمونه، در قطعه کد زیر یک لیست با ۳ عنصر تعریف کرده‌ایم.

1programming_languages = ("Python", "Java", "C++")

اکنون می‌خواهیم چندین عنصر را به این لیست اضافه کنیم.

1programming_languages.extend(("JavaScript", "Ruby"))

با اجرای این دستور، عناصر موجود در لیستی که به عنوان آرگومان به متد extend()

ارسال کردیم به لیست programming_languages

 اضافه می‌شود و در نهایت لیستی به‌صورت (‘Python’, ‘Java’, ‘C++’, ‘JavaScript’, ‘Ruby’)

 خواهیم داشت.

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

لیستی به‌صورت (“Python”, “Java”, “C++”, “JavaScript”)

 را در نظر بگیرید. می‌خواهیم عنصر Java

 را از این لیست حذف کنیم. این کار با به‌کارگیری متد remove()

به شکلی که در ادامه آورده شده، قابل انجام است.

1programming_languages.remove("Java")

پس از اجرای این دستور، لیست اولیه به‌صورت (“Python”, “C++”, “JavaScript”)

 خواهد بود.

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

برای حذف عنصری از لیست پایتون می‌توانیم از کلمه کلیدی del

 به‌همراه ایندکس خانه مورد نظر در لیست استفاده کنیم.

1del programming_languages(0)  # Removes the first language (Python)

این دستور پس از اجرا، عنصر اول از لیست programming_languages

را حذف می‌کند.

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

فرض کنید لیست programming_languages

 شامل (“Python”, “Java”, “C++”)

 وجود دارد. با استفاده از متد insert()

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

1programming_languages.insert(1, "JavaScript")

با اجرای این دستور، مقدار “JavaScript”

 به لیست ما و در جایگاه ایندکس ۱ اضافه می‌شود. یعنی لیست جدید به‌صورت (“Python”, “JavaScript”, “Java”, “C++”)

 خواهد بود.

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

این متد، آیتم موجود در ایندکس مورد نظر را حذف و مقدار آن را بر می‌گرداند. لیست زیر را در نظر بگیرید.

1programming_languages = ("Python", "Java", "C++")

حال، از متد pop()

 به‌صورت زیر استفاده می‌کنیم.

1popped_language = programming_languages.pop(1)

با این کار، لیست programming_languages

 برابر با (‘Python’, ‘C++’)

 خواهد شد. مقدار حذف شده یعنی “Java”

 نیز در متغیر popped_language

 قرارمی‌گیرد.

متدهای index و count لیست در پایتون

فرض کنید لیستی به‌صورت زیر داریم.

1programming_languages = ("Python", "Java", "C++", "Python")

اکنون می‌خواهیم شماره ایندکس مقدار Java

 را بیابیم. برای این منظور از متد index()‎

 به‌صورت زیر استفاده می‌کنیم.

1index_of_java = programming_languages.index("Java")

پس از اجرای این کد، مقدار متغیر index_of_java

 برابر با 1

 خواهد بود. همچنین، اگر بخواهیم تعداد رخداد عنصری را در یک لیست بررسی کنیم، از متد count()

 کمک می‌گیریم.

1count_of_python = programming_languages.count("Python")

با اجرای این کد، مقدار برگردانده شده در count_of_python

 برابر با تعداد وقوع عنصر “Python”

 یعنی 2

 خواهد بود.

متدهای sort و sorted لیست در پایتون

با فرض اینکه لیستی به شکل آورده شده در زیر داریم، اگر بخواهیم عناصر موجود در این لیست پایتونی را به‌صورت الفبایی مرتب کنیم، از متد sort()‎

 کمک می‌گیریم.

1programming_languages = ("Python", "Java", "C++")
2programming_languages.sort()

‎پس از اجرای این کد، عناصر لیست به‌صورت (‘C++’, ‘Java’, ‘Python’)

 مرتب خواهند شد. همچنین با sorted()‎

 و تنظیم پارامتر reverse=True

 لیست ما به‌صورت برعکس مرتب می‌شود.

1reversed_languages = sorted(programming_languages, reverse=True)

در نتیجه، ترتیب آن به‌‌شکل (‘Python’, ‘Java’, ‘C++’)

 در reversed_languages

 ذخیره خواهد شد.

نحوه ایجاد کپی یک لیست برای جلوگیری از لیست اصلی

با فرض اینکه لیستی به‌نام programming_languages

 داریم، برای ایجاد یک کپی از این لیست، از copy()‎

 به‌صورت استفاده می‌کنیم.

1copied_languages = programming_languages.copy()

اکنون copied_languages

، لیستی است که تغییر در آن، لیست اصلی را تحت تأثیر قرار نمی‌دهد.

پاک‌سازی عناصر لیست با clear

برای پاک کردن همه عناصر موجود یک لیست فرضی programming_languages

 ، از clear()

 به‌صورت زیر استفاده می‌کنیم.

1programming_languages.clear()

با انجام این کار، لیست ما تهی یا ()

 می‌شود.

محاسبه طول، مجموع، مقدار Min و Max عناصر یک لیست در پایتون

فرض کنید لیستی به‌نام numbers

 شامل تعدادی عناصر عددی داریم.

1numbers = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)
2length = len(numbers)
3min_value = min(numbers)
4max_value = max(numbers)
5total = sum(numbers)

با len()

 می‌توانیم طول لیست یا تعداد عناصر آن را محاسبه کنیم. پس مقدار برگردانده شده در متغیر length

 در خط دوم برابر با 11

 خواهد بود.

توابع min()

 و max()

 ، کمینه و بیشینه مقادیر لیست – مشخص شده به‌عنوان آرگومان – را محاسبه می‌کنند. پس مقادیر ذخیره شده در min_value

 و max_value

 به‌ترتیب برابر با 1

 و 9

 خواهد بود.

در خط پنجم، مجموع عناصر لیست را با تابع sum()

 محاسبه کرده است. بنابراین، مقدار total

 برابر با 44

 خواهد بود.

مثال های مربوط به لیست در پایتون

مثال ایجاد لیست خالی در پایتون

تنها با استفاده از ()

 می‌توانیم یک لیست خالی بسازیم. قطعه کد زیر، لیستی خالی به‌نام programming_languages

 ایجاد می‌کند.

1programming_languages = ()

مثال ایجاد لیست در پایتون

می‌خواهیم یک لیست پایتونی به‌نام programming_languages

 ایجاد کنیم که شامل ۵ عنصر رشته‌ای و بیان‌گر نام زبان‌های برنامه‌نویسی محبوب باشد.

1programming_languages = ("Python", "Java", "C++", "JavaScript", "Ruby")

مثال ایجاد لیست تو در تو یا سلسله مراتبی در پایتون

همان‌طور که گفتیم، لیست‌های پایتون می‌توانند شامل عناصری – حتی یک لیست دیگر – باشند. قطعه کد زیر لیستی به‌نام programming_languages

ساخته که شامل ۲ عنصر است. عنصر اول یک لیست ۳ عنصری و عنصر دوم، یک لیست با ۲ عنصر است.

1programming_languages = (("Python", "Java", "C++"), ("JavaScript", "Ruby"))

مثال دسترسی به محتویات عنصر اول یک لیست در پایتون

خط اول از قطعه کد زیر، لیستی شامل ۵ عنصر به‌نام programming_languages

 ایجاد کرده است.

1programming_languages = ("Python", "Java", "C++", "JavaScript", "Ruby")
2first_language = programming_languages(0)  # Accesses the first element (Python)

در خط دوم، مقدار خانه اول از لیست تعریف‌شده را بر می‌گرداند و در متغیر first_language

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

 برابر با Python

 خواهد بود.

مثال برش یک لیست در پایتون

پایتون، امکان دسترسی به عنصر یا محدوده‌ای از عناصر موجود در لیست را به‌وسیله Indexing یا شاخص‌دهی فراهم کرده است. در خط دوم از قطعه کدهای زیر، محدوده ایندکس‌های ۱ تا ۴ – به‌جز خود ایندکس ۴ – یعنی محتوای خانه‌های دوم، سوم و چهارم از لیست programming_languages

را در لیست subset

 قرار می‌دهد.

1programming_languages = ("Python", "Java", "C++", "JavaScript", "Ruby")
2subset = programming_languages(1:4)  # Gets elements at index 1, 2, and 3 (Java, C++, JavaScript)

پس از اجرای این کدها، subset

لیستی با ۳ عنصر (‘Java’, ‘C++’, ‘JavaScript’)

 خواهد بود. توجه داشته باشید که Indexing در پایتون از عدد صفر شروع می‌شود.

مثال دسترسی به محتویات عنصر یک لیست در پایتون با Indexing منفی

دسترسی به عناصر یک لیست در پایتون می‌تواند با شاخص‌دهی منفی نیز انجام شود. یعنی می‌توانیم از ایندکس‌های ۱-، ۲- و غیره استفاده کنیم. در این حالت شاخص‌ها از انتهای لیست شروع می‌شوند. به‌طوری‌که آخرین عنصر یک لیست دارای شاخص یا ایندکسی برابر با ۱- است، عنصر یکی مانده به آخر ایندکس ۲- را دارد و الی آخر.

1last_language = programming_languages(-1)  # Accesses the last element (Ruby)

این قطعه کد، عنصر آخر لیست لیست programming_languages

را در متغیر last_language

 قرار می‌دهد.

مثال جایگزینی یا اصلاح عنصر مورد نظر لیست در پایتون

برای جایگزینی یا تغییر عنصر موجود در لیست (“Python”, “JavaScript”, “Java”, “C++”)

 ، تنها کافی است تا مقداری جدید به ایندکس مورد نظر اختصاص بدهیم.

1programming_languages(2) = "Ruby"

پس از اجرای این کد، ایندکس ۲ – یا همان خانه سوم – از لیست programming_languages

 برابر با مقدار جدید Ruby

 خواهد شد و و لیست حاصل برابر با (“Python”, “JavaScript”, “Ruby”, “C++”)

 می‌شود.

سوالات متداول

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

لیست‌ها چه نوع داده ای را نگه می‌دارند؟

List-ها می‌توانند Data Type یا نوع داده‌های گوناگونی نظیر عدد صحیح، رشته‌ها، اعداد اعشاری، حتی سایر لیست‌ها و غیره را در خود نگه دارند.

دلیل اهمیت لیست در پایتون چیست؟‎

لیست‌ها به دلیل انعطاف‌پذیری بالا، چندمنظوره بودن و استفاده آسان، نقش پررنگی را در برنامه‌نویسی پایتون ایفا می‌کنند.

«انعطاف‌پذیری» (Flexibility) لیست‌های پایتون می‌توانند انواع داده‌های گوناگون را ذخیره کنند که این مورد، List-ها را برای استفاده‌های مختلف به‌شدت انعطاف پذیر کرده است.

«چندمنظوره بودن» (Versatility): لیست‌های پایتون برای مواردی نظیر ذخیره‌سازی داده‌ها، دستکاری و پیمایش مورد استفاده قرار می‌گیرند که آن‌ها را به ساختاری مهم در بسیاری از برنامه‌‌‌‌های پایتونی تبدیل کرده است.

«استفاده آسان» (Ease of Use): پایتون با ارائه مجموعه‌ای از متدها و توابع مرتبط به لیست، انجام عملیات روی لیست‌‌ها را ساده کرده است.

نحوه تعریف لیست در پایتون چگونه است؟

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

جمع‌بندی

در این مطلب از مجله فرادرس، سعی بر این بوده تا مروری جامع روی ساختمان داده «لیست» (List) در پایتون داشته باشیم و با زبانی ساده نحوه نوشتن و همچنین متدهای کار با آن‌ها را نیز آموزش دهیم.

لیست‌های پایتون یکی از ساختار داده‌های داینامیک و پرکاربرد به‌شمار می‌روند که دانستن نحوه استفاده از آن‌ها برای هر برنامه‌نویس پایتون ضروری است. به یاد داشته باشید که تمرین و حل مثال‌های مختلف، راز ماهر شدن در هنر‌های گوناگون و به‌خصوص برنامه‌نویسی به‌شمار می‌رود. در این مطلب برای درک بهتر، مثال‌های متعددی را بیان کرده‌ایم.