در پایتون، شش «نوع داده» (Data Type) گوناگون وجود دارد. یکی از این موارد «لیست» (list) است. در این مطلب، به نوع داده لیست در پایتون پرداخته خواهد شد. در ابتدا، معرفی کوتاهی پیرامون این نوع داده انجام می‌شود و سپس، روش ساخت لیست، برش زدن یک لیست، حذف یا اضافه کردن عناصر به لیست و دیگر موارد مورد بررسی قرار می‌گیرد.

شایان ذکر است، پیش از این در مطلب «انواع داده در پایتون (Data Types) — به زبان ساده» به انواع داده‌های موجود در پایتون، شامل «عدد» (Number)، «لیست» (List)، «تاپل» (Tuple)، «رشته» (String)، «مجموعه» (Set) و «دیکشنری» (Dictionary) پرداخته شد. همچنین، در مطلب «نوع داده عددی در پایتون — به زبان ساده»، انواع داده‌های عددی شامل «اعداد صحیح» (integers)، «اعداد ممیز شناور» (floating point) و «اعداد مختلط» (complex numbers) مورد بررسی قرار گرفتند.

نوع داده لیست در پایتون

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

روش ساخت نوع داده لیست در پایتون

در برنامه‌نویسی پایتون، نوع داده لیست با قرار دادن همه آیتم‌ها (عناصر) درون یک براکت (کمانک) یعنی [ ]، ساخته می‌شود. عناصر یک لیست، با استفاده از علامت ویرگول، یعنی «,»، از هم جدا می‌شوند. لیست می‌تواند هر تعدادی عنصر داشته باشد و این عناصر ممکن است خود دارای انواع داده متفاوتی باشند. برای مثال، عناصر یک لیست ممکن است ترکیبی از نوع داده «صحیح» (integer)، «شناور» (float) و «رشته» (String) باشند. در کد زیر، مثال‌هایی پیرامون روش ساخت لیست آورده شده است.

در خط اول کد، یک لیست خالی ساخته شده است. از این مثال می‌توان فهمید که امکان ساختن لیست خالی در پایتون وجود دارد. در مثال دومی که در همین قطعه کد موجود است، یک لیست با سه عنصر ۱، ۲ و ۳ که هر سه دارای نوع داده عدد صحیح (int) هستند، ساخته شده است. در آخرین خط کد، یک لیست با سه عنصر ۱ (نوع داده عدد صحیح)، “Hello” (رشته) و ۳.۴ (ممیز شناور) ساخته شده است.

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

[‘a’] و [8, 4, 6] خود دو لیست مجزا و “mouse” یک رشته است. کلیه این موارد به عنوان عنصرهای لیست my_list در آن قرار گرفته‌اند و به این صورت، یک لیست تو در تو ایجاد شده است. در واقع لیستی وجود دارد که خود شامل دو لیست دیگر است.

روش دسترسی داشتن به عناصر یک لیست

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

اندیس لیست

می‌توان از عمل‌گر «اندیس» (Operator) یعنی []، برای دسترسی داشتن به یک عنصر از لیست، استفاده کرد. اندیس لیست‌ها در پایتون از عدد ۰ شروع می‌شود. دانستن این نکته بسیار حائز اهمیت است، زیرا در برخی از زبان‌ها مانند «جولیا» (Julia)، «فرترن» (Fortran)، «متلب» (Matlab)، «اِرلنگ» (Erlang) و «اسمال‌تاک» (Smalltalk) اندیس آرایه از عدد ۱ شروع می‌شود. البته، در اغلب زبان‌های محبوب، مانند «سی» (C)، «روبی» (Ruby)، «جاوا» (Java)، «پرل» (Perl) و جاوااسکریپت (JavaScript)، اندیس آرایه از صفر شروع می‌شود.

بنابراین، برای لیستی که حاوی ۵ عنصر است، اندیس لیست از ۰ تا ۴ است. تلاش برای دسترسی به اندیس‌هایی که وجود ندارند، موجب IndexError (خطای اندیس) می‌شود. اندیس باید یک مقدار صحیح (int) باشد. نمی‌توان از نوع داده شناور یا دیگر انواع برای اندیس لیست استفاده کرد؛ انجام چنین کاری، موجب TypeError (خطای نوع) می‌شود. برای دسترسی داشتن به عناصر لیست تو در تو، باید از اندیس دهی تو در تو استفاده کرد. در ادامه، مثال‌های پیرامون نحوه استفاده از اندیس برای دسترسی به محتوای نوع داده لیست در پایتون، ارائه شده است.

در قطعه کد بالا، ابتدا یک لیست با عنوان my_list ساخته شده که دارای ۵ عنصر از نوع داده رشته است. چنانچه پیش‌تر بیان شد، اندیس نوع داده لیست در پایتون، از عدد صفر شروع می‌شود. بنابراین، برای این لیست که دارای ۵ عنصر است، اندیس از عدد صحیح ۰ شروع می‌شود و تا ۴ ادامه دارد. با استفاده از دستور [my_list[0، دسترسی به اولین عنصر لیست انجام شده و با استفاده از تابع ()print، خروجی (p) چاپ شده است. با استفاده از کد ([print(my_list[2، به عنصر سوم لیست (دارای اندیس ۲) دسترسی ایجاد شده و با استفاده از تابع ()print مقدار (o) آن چاپ شده است. در نهایت، کد ([print(my_list[4 عنصر پنجم لیست، یعنی e را چاپ می‌کند.

در مثال دیگری که در همین قطعه کد موجود است، لیستی با عنوان n_list تعریف شده که حاوی یک رشته (Happy) و یک لیست دیگر ([2,0,1,5]) است. در واقع، n_list یک لیست تو در تو است. اکنون، با استفاده از اندیس‌دهی تو در تو، به عناصر لیست دسترسی ایجاد می‌شود. [n_list[0][1 یعنی از عنصر با اندیس 0 در لیست (اولین عنصر موجود در لیست که یک رشته است)، دومین بخش (اندیس یک) را بازگردان. بنابراین، خروجی برابر با a خواهد بود. شایان توجه است که در صورت وجود رشته در لیست، می‌توان به تک تک کاراکترهای آن، به شیوه بیان شده، دسترسی پیدا کرد.

با استفاده از دستور ([print(n_list[1][3، از عنصر دوم لیست (که خود یک لیست دیگر است)، عنصر چهارم (دارای اندیس ۳) بازگردانده و در خروجی چاپ می‌شود. در واقع، [1] به جایگاه عنصر در لیست اصلی و [3] به جایگاه عنصر در لیستی که داخل لیست اصلی قرار گرفته، اشاره دارد.

اندیس‌دهی منفی

پایتون، امکان اندیس‌دهی منفی برای یک توالی را نیز فراهم می کند. در مثالی که در ادامه ارائه شده است، اندیس ۱- به آخرین عنصر از لیست و ۲- به عنصر یکی مانده به آخر (دومین عنصر از آخر لیست به اول آن) اشاره دارد و به همین ترتیب می‌توان با اندیس‌دهی منفی، عناصر لیست را از آخر به اول فراخوانی کرد. مثال زیر برای این نوع از اندیس‌دهی، قابل توجه است.

در اینجا، ابتدا لیست my_list ساخته شده که حاوی ۵ عنصر از نوع رشته است. سپس، با استفاده از ([print(my_list[-1 عنصر آخر لیست یعنی e بازگردانده و چاپ شده است. دستور ([print(my_list[-5 اولین عنصر از لیست، یعنی p، را چاپ می‌کند.

نوع داده لیست در پایتون -- به زبان ساده

روش برش زدن لیست در پایتون

می‌توان به طیف وسیعی از عناصر لیست با استفاده از عملگر برش زدن یعنی «دونقطه» (colon) دسترسی داشت. در ادامه، مثال‌هایی برای این مورد ارائه شده است.

در قطعه کد بالا، ابتدا لیست my_list تعریف شده که حاوی ۹ عنصر است. بنابراین، اندیس لیست از عدد ۰ تا ۸ خواهد بود. سپس، با استفاده از دستور ([print(my_list[2:5، از عنصر دارای اندیس دو (یعنی عنصر سوم لیست که o است) تا اندیس ۴ (عنصر پنجم که r است)، در خروجی چاپ می‌شوند. همانطور که مشهود است، از اندیس ۲ تا سر اندیس ۵ (یعنی اندیس ۴ و در واقع عنصر سوم تا پنجم) آرایه چاپ شده‌اند.

[5-] اشاره به عنصر پنجم از آخر به اول دارد که در واقع می‌شود عنصر دارای اندیس ۴ (از اول به آخر)، یعنی پنجمین عنصر از لیست که برابر با r است. با استفاده از دستور ([print(my_list[:-5 از عنصر اول تا عنصر چهارم لیست (دارای اندیس ۳) چاپ می‌شوند.

['p', 'r', 'o', 'g']

چنانکه مشخص است، خود عنصر مربوط به اندیسی که به عنوان انتهای بازه آورده شده است، چاپ نمی‌شود. یعنی در مثال بالا، از اول تا سر اندیس ۴، یعنی اندیس ۳، چاپ می‌شود. در دستور ([:print(my_list[5، از عنصر دارای اندیس ۵ (یعنی ششمین عنصر لیست با مقدار a) تا انتهای لیست (آخرین عنصر) چاپ می‌شوند.

['a', 'm', 'i', 'z']

با استفاده از دستور ([:]print(my_list، از ابتدا تا انتهای لیست، یعنی کلیه عناصر، چاپ می‌شوند.

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

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

نوع داده لیست در پایتون

روش تغییر عنصر کنونی و یا درج عنصر جدید در لیست

نوع داده لیست در پایتون قابل تغییر محسوب می‌شود. شایان ذکر است، نوع داده‌های «تاپل» (Tuple) و «رشته» (String) در پایتون غیر قابل تغییر هستند. می‌توان از عملگر تخصیص، یعنی «=»، برای تغییر دادن یک عنصر و یا طیفی از عناصر استفاده کرد.

می‌توان «یک عنصر» را با استفاده از متد ()append و «چند عنصر» را با استفاده از متد ()extend به لیست اضافه کرد.

در قطعه کد بالا، ابتدا یک لیست با عنوان odd ساخته شده که دارای سه عنصر صحیح ۱، ۲ و ۳ است. سپس، با استفاده از متد append، یعنی دستور (odd.append(7، عدد ۷ نیز به لیست افزوده شده است. سپس، با استفاده از دستور (print(odd، لیست چاپ می‌شود. خروجی به صورت زیر خواهد بود.

[1, 3, 5, 7]

با استفاده از متد extend دستور ([odd.extend([9, 11, 13)‎‎)، عنصرهای ۹، ۱۱ و ۱۳ نیز به لیست اضافه شده‌اند و با بهره‌گیری از (print(odd، لیست odd در خروجی چاپ شد که به صورت زیر است.

[1, 3, 5, 7, 9, 11, 13]

همچنین، می‌توان از عملگر «+» برای ترکیب دو لیست استفاده کرد. این کار «الحاق» (Concatenation) نیز نامیده می‌شود. عملگر «*»، یک لیست را به تعداد یک عدد داده شده، تکرار می‌کند. مثال‌های زیر، در همین رابطه هستند.

در دستور ([print(odd + [9, 7, 5، مقادیر ۹، ۷ و ۵ به لیست اضافه شده‌اند و خروجی چاپ شده است.

[1, 3, 5, 9, 7, 5]

با استفاده از دستور (print([“re”] * 3، مقدار [“re”] سه بار تکرار و چاپ می‌شود.

['re', 're', 're']

علاوه بر این، می‌توان با استفاده از متد ()insert یک عنصر را در موقعیت مشخصی از لیست درج کرد و یا چندین عنصر را در برشی خالی از یک لیست قرار داد. مثال‌های این موارد در ادامه آمده است.

در متد بالا، ابتدا لیست odd با دو عنصر ۱ و ۹ ساخته شده است. سپس، با استفاده از متد insert، مقدار ۳ در اندیس ۱ از لیست قرار می‌گیرد. خروجی به صورت زیر خواهد بود.

[1, 3, 9]

با استفاده از دستور [odd[2:2] = [5, 7، مقادیر ۵ و۷ در برشی از لیست با شروع از اندیس ۲ قرار می‌گیرند.

[1, 3, 5, 7, 9]

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

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

در قطعه کد بالا، ابتدا لیست [‘my_list = [‘p’,’r’,’o’,’b’,’l’,’e’,’m تعریف شده است. سپس، با استفاده از دستور [del my_list[2، عنصر سوم لیست یعنی o حذف می‌شود. خروجی (print(my_list به صورت زیر است.

['p', 'r', 'b', 'l', 'e', 'm']

سپس، با استفاده از دستور [del my_list[1:5، از اندیس ۱ تا اندیس ۵ حذف می‌شوند (یعنی عنصر خانه دارای اندیس ۵ هم پاک می‌شود). خروجی دستور (print(my_list، در این مرحله، به صورت زیر است.

['p', 'm']

در نهایت، با استفاده از دستور del my_list، لیست به طور کامل پاک می‌شود. خروجی دستور (print(my_list خطای NameError: name ‘my_list’ is not defined خواهد بود. می‌توان از متد ()remove برای حذف کردن یک عنصر داده شده و از ()pop برای حذف کردن یک عنصر در اندیس داده شده استفاده کرد. متد ()pop عنصر را حذف و آخرین عنصر را در صورتی که اندیسی داده نشده باشد، باز می‌گرداند. این کار کمک می‌کند تا بتوان لیست‌ها را به عنوان پشته پیاده‌سازی کرد (اولین ورودی، آخرین خروجی). می‌توان از متد ()clear نیز برای خالی کردن لیست استفاده کرد.

در کد بالا، ابتدا لیست [‘my_list = [‘p’,’r’,’o’,’b’,’l’,’e’,’m تعریف شده است. سپس، با استفاده از دستور (‘my_list.remove(‘p، عنصر p از لیست حذف می‌شود. خروجی دستور (print(my_list به صورت زیر خواهد بود.

['r', 'o', 'b', 'l', 'e', 'm']

دستور ((print(my_list.pop(1 عنصر اندیس اول را حذف و مقدار آن را باز می‌گرداند. خروجی به صورت زیر است:

o

خروجی (print(my_list به صورت زیر است.

['r', 'b', 'l', 'e', 'm']

دستور (()print(my_list.pop آخرین عنصر لیست را حذف کرده و مقدار آن را باز می‌گرداند.

m

خروجی (print(my_list به صورت زیر است.

['r', 'b', 'l', 'e']

()my_list.clear، کلیه عناصر لیست را پاک می‌کند. پس از اجرای دستور مذکور، خروجی (print(my_list به صورت زیر خواهد بود.

[]

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

در کد بالا، ابتدا لیست [‘my_list = [‘p’,’r’,’o’,’b’,’l’,’e’,’m ساخته می‌شود. سپس، یک لیست خالی به برش [2:3] تخصیص داده می‌شود. با دستور my_list، محتوای لیست نمایش داده می‌شود که به صورت زیر است.

['p', 'r', 'b', 'l', 'e', 'm']

با دستور [] = [[my_list[2:5] یک لیست خالی به برش [2:5] افزوده می‌شود. با my_list، محتوای لیست نمایش داده می‌شود که به صورت زیر است.

['p', 'r', 'm']

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

متدهای گوناگونی برای شی لیست در زبان برنامه‌نویسی پایتون وجود دارد که لیست آن در زیر آمده است. به این متدها می‌توان از طریق ()list.method دسترسی داشت. برخی از متدها در حال حاضر در کدهایی که پیش از این ارائه شده‌اند، مورد استفاده قرار گرفته بودند.

  • ()append: یک عنصر را به انتهای لیست اضافه می‌کند.
  • ()extend: همه عناصر لیست را به لیست دیگری اضافه می‌کند.
  • ()insert: یک عنصر را در اندیس تعریف شده درج می‌کند.
  • ()remove: یک عنصر را از لیست حذف می‌کند.
  • ()pop: یک عنصر را در اندیس داده شده حذف می‌کند و مقدار آن را باز می‌گرداند.
  • ()clear: همه عناصر را از لیست حذف می‌کند.
  • ()index: اندیس اولین عنصر مطابق با آرگومان متد را باز می‌گرداند.
  • ()count: تعداد عناصری که مطابق با آرگومان داده شده به متد هستند را باز می‌گرداند.
  • ()sort: عناصر موجود در لیست را به ترتیب صعودی مرتب می‌کند.
  • ()reverse: ترتیب عناصر موجود در لیست را معکوس می‌کند.
  • ()copy: یک Shallow Copy از لیست را باز می‌گرداند.

در ادامه، مثال‌هایی از متدهای ویژه نوع داده لیست در پایتون، در ادامه آورده شده‌اند.

در قطعه کد بالا، ابتدا یک لیست با عنوان my_list تعریف شده است که هفت عنصر دارد (در نتیجه اندیس عناصر لیست از ۰ تا ۶ است). با دستور ((print(my_list.index(8، اندیس اولین عنصری که با مقدار موجود در پرانتز مطابقت دارد، با استفاده از متد ()index بازگردانده می‌شود و توسط تابع ()print در خروجی چاپ می‌شود.

برای my_list، این مقدار برابر با ۱ است. با دستور، ((print(my_list.count(8، تعداد عنصرهایی از لیست که با آرگومان داده شده به متد برابر هستند، بازگردانده و در خروجی چاپ می‌شوند. برای my_list که در اینجا معرفی شده،‌ خروجی برابر با ۲ است. با استفاده از دستور ()my_list.sort، عناصر موجود در لیست به ترتیب صعودی مرتب می‌شوند. خروجی (print(my_list در این حالت، برابر با [۸, ۸, ۶, 4, ۳, ۱, ۰] است. ()my_list.reverse ترتیب عناصر لیست my_list را معکوس می‌کند. خروجی (print(my_list در این حالت برابر با [0, 1, 3, 4, 6, 8, 8] است.

راهی برای ساخت یک لیست جدید

List Comprehension راهی جالب و کوتاه، برای ساخت لیست جدید از یک لیست موجود در پایتون است. برای تعریف List Comprehension، از دستور for درون براکت استفاده می‌شود. در ادامه، مثالی از ساخت لیست با استفاده از List Comprehension ارائه شده است.

با استفاده از قطعه کد بالا، حاصل دو به توان اعداد موجود در  (range(10 ساخته می‌شود. در واقع، عدد دو به توان ۱، ۲، ۳ الی ۹ محاسبه می‌شود و در یک لیست قرار می‌گیرد. خروجی قطعه کد بالا، [1, 2, 4, 8, 16, 32, 64, 128, 256, 512] است. کد ارائه شده در بالا، معادل کد زیر محسوب می‌شود.

List Comprehension می‌تواند بسته به نیاز کاربر، شامل عبارت‌های for یا if بیشتری باشد. یک عبارت if انتخابی می‌تواند گزینه‌ها را برای لیست جدید فیلتر کند. در ادامه، مثال‌هایی در این رابطه ارائه شده است.

با بهره‌گیری از کد [pow2 = [2 ** x for x in range(10) if x > 5، لیستی از عدد ۲ به توان اعداد موجود در رنج ۱۰ که از ۵ بزرگ‌تر هستند (یعنی ۶، ۷، ۸ و ۹) ساخته می‌شود. با فراخوانی pow2، خروجی به صورت [64, 128, 256, 512] خواهد بود. با بهره‌گیری از کد [odd = [x for x in range(20) if x % 2 == 1، اعداد فرد موجود در رنج ۲۰ چاپ می‌شوند. بنابراین، با فراخوانی لیست odd، خروجی به صورت [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] خواهد بود. عناصر لیست حاصل از کد [x+y for x in [‘Python ‘,’C ‘] for y in [‘Language’,’Programming’]، ترکیبی از عناصر موجود در لیست  [‘Python ‘,’C ‘] و  [‘Language’,’Programming]  به صورت دو به دو خواهند بود. در واقع، خروجی نهایی [‘Python Language’, ‘Python Programming’, ‘C Language’, ‘C Programming’] است.

دیگر عملیات لیست در پایتون

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

تست عضویت در لیست در پایتون

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

حلقه زدن در لیست

با استفاده از حلقه for، می‌توان در لیست حلقه زد (تکرار داشت).

توابع توکار با لیست

توابع توکاری مانند ()any() ،enumerate() ،len() ،max() ،min() ،list() ،sorted و ()all معمولا برای انجام کارهای گوناگون، با لیست‌ها مورد استفاده قرار می‌گیرند. کارکرد هر یک از این توابع، در ادامه آمده است.

  • ()all: اگر همه مقادیر موجود در لیست true باشند (و یا لیست خالی باشد)، مقدار True را باز می‌گرداند.
  • ()any: در صورتی که هر عنصری از لیست true باشد، مقدار True را باز می‌گرداند.
  • ()enumerate: یک شی شمارشی را باز می‌گرداند. شامل اندیس و مقدار همه عناصر یک لیست به صورت یک «تاپل» (tuple) است.
  • ()len: طول لیست (تعداد عناصر لیست) را باز می‌گرداند.
  • ()list: یک نوع تکرار شونده (تاپل، رشته، مجموعه یا دیکشنری) را به لیست تبدیل می‌کند.
  • ()max: بزرگترین عنصر لیست را باز می‌گرداند.
  • ()min: کوچکترین عنصر لیست را باز می‌گرداند.
  • ()sorted: یک لیست مرتب شده جدید را باز می‌گرداند (خود لیست را مرتب نمی‌کند).
  • ()sum: مجموع همه عناصر موجود در لیست را باز می‌گرداند.

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

telegram
twitter

الهام حصارکی

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

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