آرایه در پایتون – از انواع تا ساخت و نحوه نوشتن + نمونه کد

۳۰۴۱ بازدید
آخرین به‌روزرسانی: ۲۳ دی ۱۴۰۲
زمان مطالعه: ۱۰ دقیقه
آرایه در پایتون – از انواع تا ساخت و نحوه نوشتن + نمونه کد

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

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

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

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

به‌طور کلی، «آرایه‌ها» (Arrays) در زبان‌های برنامه‌نویسی، ساختار داده یا «ساختمان داده‌ای» (Data Structure) هستند که به ما امکان می‌دهند تا مقادیر متعددی با نوع داده یکسان را ذخیره کنیم. Array در برنامه‌نویسی را می‌توانیم به‌صورت ظرفی تصور کنیم که تعداد ثابتی از اشیا هم نوع را نگه می‌دارد.

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

یک مرد در حال کار با لپ تاپ در فضایی پر از مکعب

ماژول array در پایتون

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

آرایه، مجموعه‌ای از «موارد» (آیتم‌ها | Items) هستند که در مکان‌های مجاور در حافظه ذخیره می‌شوند. هدف در اینجا ذخیره آیتم‌های متعددی است که دارای نوع داده مشابهی هستند.

تصویری که در ادامه آورده‌ایم ساختار کلی آرایه‌ای به طول ۱۰ را نشان می‌دهد.

ساختار کلی یک آرایه
«برای مشاهده تصویر در اندازه اصلی، روی آن کلیک کنید».

ایندکس - یا شماره - نخستین خانه آرایه برابر با صفر است.

نحوه ایجاد آرایه در پایتون

برای ایجاد یک آرایه در پایتون می‌بایست ابتدا ماژول array را به‌ شکل زیر ایمپورت کنیم.

import array as arr

عبارت arr  نام مستعاری است که به این ماژول هنگام ایمپورت آن نسبت داده‌ایم و در ادامه، به‌جای آوردن نام کامل این ماژول به‌کار می‌بریم.

کدهای ایجاد یک آرایه در پایتون

کدهایی که در ادامه آورده‌ایم، ۲ آرایه، یکی از نوع اعداد صحیح و دیگری از نوع اعداد اعشاری می‌سازد.

1import array as arr
2a = arr.array('i', [1, 2, 3])
3print("The new created array is : ", end=" ")
4for i in range(0, 3):
5	print(a[i], end=" ")
6print()
7b = arr.array('d', [2.5, 3.2, 3.3])
8print("\nThe new created array is : ", end=" ")
9for i in range(0, 3):
10	print(b[i], end=" ")

کدهای بالا را در ادامه توضیح داده‌ایم.

خط شماره ۲: با استفاده از کلاس array  از ماژول ایمپورت شده arr ، آرایه‌ای به‌نام a می‌سازیم که عناصر لیست [1, 2, 3]  را به صورت عدد صحیح با نماد 'i'  نگهداری می‌کند.

خطوط شماره ۲ تا ۵: آرایه ساخته‌شده a  را چاپ می‌کند که به‌صورت زیر است.

The new created array is :  1 2 3

خط شماره ۷: آرایه دیگری به‌نام b  می‌سازیم. عناصر این آرایه عناصر لیست ورودی [2.5, 3.2, 3.3]  هستند که با نوع اعشاری یا 'd'  ذخیره می‌شوند.

خطوط شماره ۸ تا ۱۰: آرایه ساخته‌شده b  را چاپ می‌کند که به‌صورت زیر است.

The new created array is :  2.5 3.2 3.3

پیچیدگی ایجاد آرایه

پیچیدگی ایجاد آرایه به‌صورت زیر است.

پیچیدگی زمانیپیچیدگی فضایی
O(1)O(n)

نوع داده های آرایه در پایتون

در ادامه، برخی از «انواع داده‌ای» (Data Types) را آورده‌ایم که در ایجاد آرایه‌هایی با انواع داده‌ای گوناگون مفید هستند.

کد نوعنوعنوع پایتونحداقل اندازه به بایت
'b'signed charint1
'B'unsigned charint1
'u'Py_UNICODEunicode character2
'h'signed shortint2
'H'unsigned shortint2
'i'signed intint2
'I'unsigned intint2
'l'signed longint4
'L'unsigned longint4
'q'signed long longint8
'Q'unsigned long longint8
'f'floatfloat4
'd'doublefloat8

افزودن عنصر جدید به آرایه

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

مجموعه ای از مکعب های زرد و آبی در کنار یکدیگر

کدهای افزودن عنصر جدید به آرایه

کدهایی که در ادامه آورده‌ایم پیاده‌سازی موارد گفته شده را نشان می‌دهند.

1import array as arr
2a = arr.array('i', [1, 2, 3])
3print("Array before insertion : ", end=" ")
4for i in range(0, 3):
5	print(a[i], end=" ")
6print()
7a.insert(1, 4)
8print("Array after insertion : ", end=" ")
9for i in (a):
10	print(i, end=" ")
11print()
12b = arr.array('d', [2.5, 3.2, 3.3])
13print("Array before insertion : ", end=" ")
14for i in range(0, 3):
15	print(b[i], end=" ")
16print()
17b.append(4.4)
18print("Array after insertion : ", end=" ")
19for i in (b):
20	print(i, end=" ")
21print()
  • خط شماره ۷: در این خط با استفاده از تابع insert() ، عدد صحیح 4  در ایندکس 1 از آرایه درج می‌شود.
  • خط شماره ۱۷: در این خط با استفاده از تابع append ، عدد اعشاری 4.4  به آرایه اضافه می‌شود.

خروجی کدهای گفته شده به صورت زیر خواهد بود.

Array before insertion :  1 2 3 
Array after insertion :  1 4 2 3 
Array before insertion :  2.5 3.2 3.3 
Array after insertion :  2.5 3.2 3.3 4.4

پیچیدگی افزودن عنصر به آرایه

پیچیدگی افزودن عناصر به آرایه به‌صورت زیر است.

پیچیدگی زمانیپیچیدگی فضایی
O(1) و O(n)O(1)
  • پیچیدگی زمانی برای افزودن عناصر به انتهای آرایه برابر با O(1) است.
  • پیچیدگی زمانی درج عناصر در ابتدای آرایه و به آرایه پُر نیز برابر با O(n) است.

دسترسی به عناصر آرایه

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

کدهای دسترسی به عناصر آرایه

فرض کنید آرایه‌ای به‌نام a به‌شکل زیر - به لحاظ مقادیر و نوع داده عدد صحیح و تعداد عناصر - داریم.

[1, 2, 3, 4, 5, 6]

همچنین آرایه‌ای دیگر به‌نام b به‌شکل زیر - به لحاظ مقادیر و نوع داده عدد اعشاری و تعداد عناصر - نیز تعریف کرده‌ایم.

[2.5, 3.2, 3.3]

کدهایی که در ادامه آورده‌ایم به‌کاربردن ایندکس برای دسترسی به عناصر این آرایه‌ها را نشان می‌دهد. عبارت a[0]  به عنصر اول آرایه a  دسترسی پیدا می‌کند که شامل عدد 1  است. همچنین، عبارت a[3]  عنصر چهارم از آرایه را بر می‌گرداند که مقداری برابر با 4  دارد.

به همین ترتیب، عبارت b[1]  به عنصر دوم آرایه b  دسترسی دارد که شامل عنصری با مقدار 3.2  است .همچنین، عبارت  b[2]  عنصر سوم آرایه را بر می‌گرداند که دارای مقداری برابر با 3.3  است.

1import array as arr
2a = arr.array('i', [1, 2, 3, 4, 5, 6])
3print("Access element is: ", a[0])
4print("Access element is: ", a[3])
5b = arr.array('d', [2.5, 3.2, 3.3])
6print("Access element is: ", b[1])
7print("Access element is: ", b[2])

خروجی این کدها نیز به‌صورت زیر خواهد بود.

Access element is:  1
Access element is:  4
Access element is:  3.2
Access element is:  3.3

پیچیدگی دسترسی به عناصر آرایه

پیچیدگی دسترسی به عناصر آرایه به‌صورت زیر است.

پیچیدگی زمانیپیچیدگی فضایی
O(1)O(1)

حذف عنصر از آرایه

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

تابع remove()‎

برای حذف یک عنصر از آرایه مدنظر می‌توانیم از تابع داخلی remove()  استفاده کنیم. اما توجه داشته باشید که این روش، در صورت عدم وجود عنصری در مجموعه منجر به بروز خطا می‌شود. متد remove() در هر لحظه تنها یک عنصر را حذف می‌کند و برای حذف محدوده‌ای از عناصر از Iterator-های پایتون استفاده می‌کنیم.

تابع pop()‎

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

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

کدهای حذف عنصر از آرایه

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

1import array
2arr = array.array('i', [1, 2, 3, 1, 5])
3print("The new created array is : ", end="")
4for i in range(0, 5):
5	print(arr[i], end=" ")
6
7print("\r")
8print("The popped element is : ", end="")
9print(arr.pop(2))
10print("The array after popping is : ", end="")
11for i in range(0, 4):
12	print(arr[i], end=" ")
13
14print("\r")
15arr.remove(1)
16print("The array after removing is : ", end="")
17for i in range(0, 3):
18	print(arr[i], end=" ")

خطوط ۱ تا ۵: ماژول آرایه را ایمپورت - وارد برنامه - می‌کند تا از این طریق بتوانیم با آرایه در پایتون کار کنیم. آرایه‌ای جدید به‌نام arr  با نوع عدد صحیح و شامل ۵ مقدار، ساخته و آن را با حلقه for  چاپ می‌کند.

خطوط ۷ تا ۱۲: در این قسمت عنصر موجود در ایندکس ۲ - یا همان خانه سوم با مقدار 3  - را با استفاده از متد pop()  از آرایه حذف می‌کند. از آنجایی‌که این متد مقدار حذف شده را به‌طور همزمان بر‌می‌گرداند، در اینجا مقدار آن را چاپ کرده است. در نهایت نیز لیست به‌روز شده را چاپ می‌کند.

خطوط ۱۴ تا ۱۸: در این خطوط با استفاده از متد remove() ، مقدار 1  را پیدا کرده و اولین رخداد آن - اگر چند مورد از این عنصر وجود داشته باشد فقط اولین مورد یافت شده - را حذف می‌کند.

خروجی این کدها به‌صورت زیر خواهد بود.

The new created array is : 1 2 3 1 5 
The popped element is : 3
The array after popping is : 1 2 1 5 
The array after removing is : 2 1 5 

پیچیدگی حذف عناصر از آرایه

پیچیدگی حذف عناصر از یک آرایه به‌صورت زیر است.

پیچیدگی زمانیپیچیدگی فضایی
O(1) و O(n)O(1)
  • پیچیدگی زمانی برای حذف عنصر از انتهای آرایه برابر با O(1) است.
  • پیچیدگی زمانی حذف عناصر از ابتدای آرایه یا در آرایه پُر نیز برابر با O(n) است.

برش آرایه در پایتون

راه‌های گوناگونی در پایتون وجود دارد که به‌وسیله آن می‌توانیم کل آرایه پایتونی را به همراه تمامی عناصر آن چاپ کنیم اما برای چاپ محدوده خاصی از آرایه می‌بایست از عملیات «برش» (Slice) کمک بگیریم. برای به‌کارگیری این عملیات روی یک آرایه از علامت «۲ نقطه» یا همان :  استفاده می‌کنیم.

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

  • برای چاپ عناصر آرایه از ابتدای آن تا یک محدوده مشخص [:Index]  را به‌کار می‌بریم. Index  همان شماره خانه مورد نظر است.
  • به منظور چاپ عناصر آرایه از انتهای آن از [:-Index]  استفاده می‌کنیم.
  • برای چاپ عناصر آرایه از ایندکسی مشخص تا انتهای آن [Index:]  را به‌کار می‌بریم. Index  همان شماره خانه مورد نظر است.
  • برای چاپ محدوده‌ای مشخص از عناصر آرایه از [Start Index:End Index]  به‌کار می‌بریم. Index  همان شماره خانه مورد نظر است.
  • برای چاپ کل لیست با استفاده از عملیات برش از [:]  استفاده می‌کنیم. در صورتی که بخواهیم کل آرایه را با ترتیب عکس چاپ کنیم نیز از [::-1]  استفاده می‌کنیم.
«برای مشاهده تصویر در اندازه اصلی، روی آن کلیک کنید».

کدهای حذف عنصر از آرایه

کدهایی که در زیر آورده‌ایم از برش آرایه به منظور بیرون کشبدن عناصر - یا زیرآرایه‌ها - از یک آرایه استفاده می‌کند.

1import array as arr
2l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3
4a = arr.array('i', l)
5print("Initial Array: ")
6for i in (a):
7	print(i, end=" ")
8Sliced_array = a[3:8]
9print("\nSlicing elements in a range 3-8: ")
10print(Sliced_array)
11Sliced_array = a[5:]
12print("\nElements sliced from 5th "
13	"element till the end: ")
14print(Sliced_array)
15Sliced_array = a[:]
16print("\nPrinting all elements using slice operation: ")
17print(Sliced_array)
  • خط ۸: با استفاده از عملیات برش، آرایه ساخته شده را برش زده و عناصر موجود در محدوده ایندکس‌های ۳ تا ۸ - به‌جز خود ۸ - را بیرون می‌کشد و در Sliced_array  قرار می‌دهد.
  • خط ۱۱: دوباره آرایه اصلی را از ایندکس ۵ تا انتهای آن برش زده و در Sliced_array ذخیره می‌کند.
  • خط ۱۵: تمامی عناصر آرایه اصلی را با عملیات برش بر می‌گرداند.

خروجی این کدها را در ادامه آورده‌ایم.

Initial Array: 
1 2 3 4 5 6 7 8 9 10 
Slicing elements in a range 3-8: 
array('i', [4, 5, 6, 7, 8])

Elements sliced from 5th element till the end: 
array('i', [6, 7, 8, 9, 10])

Printing all elements...

جست و جوی عنصر در آرایه

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

کدهای جست و جوی عنصر در آرایه

کدهای مربوطه را در ادامه آورده‌ایم.

1import array
2arr = array.array('i', [1, 2, 3, 1, 2, 5])
3print("The new created array is : ", end="")
4for i in range(0, 6):
5	print(arr[i], end=" ")
6
7print("\r")
8print("The index of 1st occurrence of 2 is : ", end="")
9print(arr.index(2))
10print("The index of 1st occurrence of 1 is : ", end="")
11print(arr.index(1))

خطوط ۹ و ۱۱: در این ۲ خط از متد index() به منظور یافتن ایندکس مقدار ۲ و پس از آن، یافتن ایندکس مقدار ۱ استفاده شده است. با اینکه این مقادیر در مکان‌های مختلف آرایه تکرار شده‌اند اما همان‌طور که پیش‌تر اشاره کردیم، تنها مکان اولین وقوع آن‌ها به عنوان خروجی برگردانده می‌شود.

خروجی کدهای گفته شده به‌صورت زیر است.

The new created array is : 1 2 3 1 2 5 
The index of 1st occurrence of 2 is : 1
The index of 1st occurrence of 1 is : 0

پیچیدگی جست و جوی عناصر در آرایه

پیچیدگی‌های مربوط به جست و جوی عناصر در آرایه به‌صورت زیر است.

پیچیدگی زمانیپیچیدگی فضایی
O(n)O(1)

ویرایش عناصر آرایه

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

کدهای ویرایش عناصر آرایه

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

1import array
2arr = array.array('i', [1, 2, 3, 1, 2, 5])
3print("Array before updation : ", end="")
4for i in range(0, 6):
5	print(arr[i], end=" ")
6
7print("\r")
8arr[2] = 6
9print("Array after updation : ", end="")
10for i in range(0, 6):
11	print(arr[i], end=" ")
12print()
13arr[4] = 8
14print("Array after updation : ", end="")
15for i in range(0, 6):
16	print(arr[i], end=" ")

خطوط ۸ و ۱۳: در این ۲ خط ایندکس‌های مشخصی در ۲ مکان آرایه ساخته شده از قبل، با مقادیری جدید به‌روزرسانی شده‌اند.

خروجی کدهای گفته شده به‌صورت زیر است.

Array before updation : 1 2 3 1 2 5 
Array after updation : 1 2 6 1 2 5 
Array after updation : 1 2 6 1 8 5 

پیچیدگی ویرایش عناصر آرایه

پیچیدگی‌های مربوط به ویرایش عناصر آرایه به‌صورت زیر است.

پیچیدگی زمانیپیچیدگی فضایی
O(n)O(1)

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

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

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

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

آرایه در پایتون چه نوع مقادیری را می‌تواند نگه دارد؟

ساختار داده آرایه در پایتون می‌تواند انواع داده‌های گوناگونی نظیر مقادیر صحیح، مقادیر اعشاری و غیره را نگه دارد.

ایجاد آرایه در پایتون چگونه است؟

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

افزودن عنصر جدید به آرایه در پایتون چگونه است؟

برای افزودن عنصر جدید به آرایه در پایتون می‌توانیم از متدهای insert()‎ و append()‎ استفاده کنیم.

نحوه حذف عنصر از آرایه موجود در پایتون چگونه است؟

به منظور حذف عنصر از آرایه موجود در پایتون متدهای remove()‎ و pop()‎ را به‌کار می‌بریم.

برش آرایه در پایتون چگونه است؟

برش یا Slicing آرایه پایتون به منظور بیرون کشیدن بخشی از آرایه انجام می‌شود و برای این کار از علامت « : » هنگام ایندکس دادن استفاده می‌کنیم.

جست و جوی یک عنصر در آرایه چگونه است؟

برای این کار از متد داخلی پایتون به‌نام index()‎ استفاده می‌کنیم. این متد ایندکس اولین رخداد مقدار مورد نظر - مشخص شده در آرگومان - را بر می‌گرداند.

آیا ویرایش عناصر آرایه در پایتون امکان پذیر است؟

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

جمع‌بندی

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

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

بر اساس رای ۳ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
GeeksforGeekssimplilearnbitdegreeintellipaat
نظر شما چیست؟

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