در این مطلب می خواهیم ساختمان داده هایی که در زبان پایتون به صورت پیشفرض موجود هستند را بررسی کنیم.
یک ساختمان داده چیست؟
سازماندهی ، مدیریت و ذخیره سازی داده ها از اهمیت زیادی برخوردار است؛ زیرا دسترسی آسانتر و به روز رسانی و تغییرات کارآمد را امکان پذیر می سازد.
ساختمان های داده این امکان را برای شما فراهم می کند تا داده های خود را به گونه ای سازماندهی کنید که امکان ذخیره مجموعه داده ها، مرتبط ساختن آنها و انجام عملیات بر روی آنها را داشته باشید.
انواع ساختمان داده ها در پایتون
پایتون به طور پیشفرض تعریف برخی ساختار داده ها را در خود دارد که همین موضوع شما را قادر می سازد تا داده ها را ذخیره کرده و به آنها دسترسی پیدا کنید. این ساختارهای پیشفرض یا تعبیه شده List ، Dictionary ، Tuple و Set نامیده می شوند.
همچنین، پایتون به کاربران خود اجازه می دهد تا ساختارهای داده مد نظر خود را ایجاد کنند تا امکان کنترل کامل ساختار داده خود را داشته باشند. معروف ترین ساختارهای داده Stack ، Queue ، Tree ، Linked List هستند که آموزش پیاده سازی آنها در پایتون را در مطالب بعدی وبسایت اوپن مایند به شما می آموزیم.
بنابراین اکنون که می دانید انواع مختلفی از ساختمان داده ها در دسترس است، چرا ما به سراغ ساختارهای داده تعبیه شده در پایتون نرویم تا استفاده از آنها را مرور کنیم؟!
ساختارهای داده موجود در پایتون
همانطور که از عنوان این دسته از ساختارهای داده مشخص است، این ساختارهای داده در زبان Python تعریف و تعبیه شده اند که همین باعث سهولت در برنامه نویسی و کمک به برنامه نویسان برای دستیابی سریعتر به پیاده سازی الگوریتم هایشان می شود. بیایید هر یک از آنها را با جزئیات بحث کنیم.
List در پایتون
از لیست ها برای ذخیره انواع داده های مختلف به صورت ترتیبی استفاده می شود.
آدرس هایی به هر عنصر لیست اختصاص داده شده است که به آن Index یا شاخص می گویند. مقدار شاخص از ۰ شروع می شود و تا آخرین عنصر ادامه دارد. همچنین در پایتون شاخص سازی منفی وجود دارد که از -۱ شروع می شود و شما را قادر می سازد از آخر به اول به عناصر دسترسی پیدا کنید. اجازه دهید اکنون لیست ها را با کمک یک کد مثالی بهتر درک کنیم.
ایجاد لیست
برای ایجاد لیست، از براکت های مربع استفاده و متناسب با آن عناصر را به آن اضافه می کنید. اگر هیچ عنصری را داخل براکت نگذارید، یک لیست خالی به عنوان خروجی دریافت می کنید.
my_list = [] #create empty list print(my_list) my_list = [1, 2, 3, 'example', 3.132] #creating list with data print(my_list)
خروجی:
[] [1, 2, 3, ‘example’, 3.132]
اضافه کردن عناصر به لیست
افزودن عناصر در لیست را می توان با استفاده از توابع append, extend و insert انجام داد.
- تابع append تمام عناصر منتقل شده به آن را به عنوان یک عنصر واحد اضافه می کند.
- تابع extend عناصر را یکی یکی به لیست اضافه می کند.
- تابع insert عنصر منتقل شده به طور یکجا به عنوان عضو جدید اضافه می کند و اندازه لیست را نیز افزایش می دهد.
مثال:
my_list = [1, 2, 3] print(my_list) my_list.append([555, 12]) #add as a single element print(my_list) my_list.extend([234, 'more_example']) #add as different elements print(my_list) my_list.insert(1, 'insert_example') #add element i print(my_list)
خروجی:
[1, 2, 3] [1, 2, 3, [555, 12]] [1, 2, 3, [555, 12], 234, ‘more_example’] [1, ‘insert_example’, 2, 3, [555, 12], 234, ‘more_example’]
حذف عنصر از لیست
- برای حذف عناصر ، از کلمه کلیدی del استفاده کنید که در Python تعریف شده است اما این چیزی را به ما بر نمی گرداند.
- اگر می خواهید عنصر برگردد ، از تابع pop () استفاده می کنید که مقدار ایندکس مورد نظر شما را می گیرد.
- برای حذف یک عنصر با مقدار آن ، از تابع remove استفاده می کنید.
مثال:
my_list = [1, 2, 3, 'example', 3.132, 10, 30] del my_list[5] #delete element at index 5 print(my_list) my_list.remove('example') #remove element with value print(my_list) a = my_list.pop(1) #pop element from list print('Popped Element: ', a, ' List remaining: ', my_list) my_list.clear() #empty the list print(my_list)
خروجی:
[1, 2, 3, ‘example’, 3.132, 30] [1, 2, 3, 3.132, 30] Popped Element: 2 List remaining: [1, 3, 3.132, 30] []
دسترسی به عناصر
دسترسی به عناصر لیست مشابه با همان دسترسی به کاراکترهای رشته ها در پایتون است. شما مقادیر شاخص را وارد می کنید و بنابراین می توانید مقادیر عناصر مربوطه را بدست آورید.
مثال:
my_list = [1, 2, 3, 'example', 3.132, 10, 30] for element in my_list: #access elements one by one print(element) print(my_list) #access all elements print(my_list[3]) #access index 3 element print(my_list[0:2]) #access elements from 0 to 1 and exclude 2 print(my_list[::-1]) #access elements in reverse
خروجی:
1 2 3 example 3.132 10 30 [1, 2, 3, ‘example’, 3.132, 10, 30] example [1, 2] [30, 10, 3.132, ‘example’, 3, 2, 1]
Dictionary در پایتون
از دیکشنری ها برای ذخیره جفت های مقدار-کلید استفاده می شود. برای درک بهتر ، به یک دفترچه تلفن فکر کنید که صدها و هزاران نام و شماره مربوط به آنها در آن اضافه شده است. اکنون مقادیر ثابت در اینجا نام و شماره تلفن است که به عنوان کلید فراخوانی می شوند. و نامها و شماره تلفنهای مختلف مقادیری است که به کلیدها خورانده شده است. اگر به مقادیر کلیدها دسترسی پیدا کنید ، همه نام ها و شماره های تلفن را به دست می آورید. بنابراین این یک جفت ارزش کلیدی است. و در پایتون ، این ساختار با استفاده از دیکشنری ها ذخیره می شود.
بگذارید اینها را با مثال هایی بهتر درک کنیم.
ساخت دیکشنری در پایتون
دیکشنری ها را می توان با استفاده از آکولاد یا با استفاده از فراخوانی تابع سازنده کلاس dict ایجاد کرد. هر زمان که با دیکشنری کار می کنید باید جفت های مقدار-کلید را به عنوان عنصر اضافه کنید.
مثال:
my_dict = {} #empty dictionary print(my_dict) my_dict = {1: 'Python', 2: 'Java'} #dictionary with elements print(my_dict)
خروجی:
{} {1: ‘Python’, 2: ‘Java’}
اضافه کردن و تغییر عنصر کلید-مقدار در دیکشنری
برای تغییر مقادیر درون دیکشنری، شما باید این کار را با استفاده از کلیدها انجام دهید. بنابراین، شما ابتدا به کلید دسترسی پیدا کنید و سپس مقدار را بر اساس آن تغییر دهید.
برای اضافه کردن مقادیر، شما به سادگی فقط یک جفت کلید-مقدار را اضافه کنید، همانطور که در زیر نشان داده شده است.
my_dict = {'First': 'Python', 'Second': 'Java'} print(my_dict) my_dict['Second'] = 'C++' #changing element print(my_dict) my_dict['Third'] = 'Ruby' #adding key-value pair print(my_dict)
خروجی:
{‘First’: ‘Python’, ‘Second’: ‘Java’} {‘First’: ‘Python’, ‘Second’: ‘C++’} {‘First’: ‘Python’, ‘Second’: ‘C++’, ‘Third’: ‘Ruby’}
حذف عنصر کلید-مقدار از دیکشنری
- برای حذف مقادیر، از تابع pop استفاده کنید که مقداری را که حذف شده است برمی گرداند.
- برای حذف و دریافت کامل آخرین جفت کلید-مقدار ، از تابع popitem استفاده کنید که هر دو کلید و مقدار را برمی گرداند.
- برای پاک کردن کل دیکشنری، از تابع clear استفاده می کنید.
مثال:
my_dict = {'First': 'Python', 'Second': 'Java', 'Third': 'Ruby'} a = my_dict.pop('Third') #pop element print('Value:', a) print('Dictionary:', my_dict) b = my_dict.popitem() #pop the key-value pair print('Key, value pair:', b) print('Dictionary', my_dict) my_dict.clear() #empty dictionary print('n', my_dict)
خروجی:
Value: Ruby Dictionary: {‘First’: ‘Python’, ‘Second’: ‘Java’} Key, value pair: (‘Second’, ‘Java’) Dictionary {‘First’: ‘Python’} {}
دسترسی به عناصر دیکشنری
در دیکشنری فقط با استفاده از کلیدها می توانید به عناصر دسترسی پیدا کنید. می توانید از تابع get استفاده کنید یا فقط مقادیر کلید را در براکت جلوی نام دیکشنری وارد کنید و مقادیر را دریافت خواهید کرد.
my_dict = {'First': 'Python', 'Second': 'Java'} print(my_dict['First']) #access elements using keys print(my_dict.get('Second'))
خروجی:
Python Java
Tuple در پایتون
تاپل ها همان لیست ها هستند با این تفاوت که داده هایی که یک بار وارد تاپل می شوند ، به هیچ وجه تغییر نمی کنند. تنها استثنا زمانی است که خود داده های داخل تاپل از طریق رفرنس آنها قابل تغییر باشد، فقط در این صورت می توان داده های تاپل را تغییر داد.
برنامه های مثالی زیر به شما کمک می کند تا از تاپل درک بهتری داشته باشید.
ایجاد tuple در پایتون
شما می توانید با استفاده از پرانتز یا با استفاده از فراخوانی تابع سازنده ()tuple ایجاد کنید.
my_tuple = (1, 2, 3) #create tuple print(my_tuple)
خروجی:
(1, 2, 3)
دسترسی به عناصر در Tuple
شیوه دسترسی به عناصر همان است که برای دستیابی به مقادیر در لیست ها وجود دارد.
my_tuple2 = (1, 2, 3, 'edureka') #access elements for x in my_tuple2: print(x) print(my_tuple2) print(my_tuple2[0]) print(my_tuple2[:]) print(my_tuple2[3][4])
خروجی:
1 2 3 edureka (1, 2, 3, ‘edureka’) 1 (1, 2, 3, ‘edureka’) e
ادغام دو tuple در پایتون
برای ادغام مقادیر، از عملگر “+” استفاده می کنید که برای ضمیمه شدن دو یا چند تاپل به کار می رود.
my_tuple = (1, 2, 3) my_tuple = my_tuple + (4, 5, 6) #add elements print(my_tuple)
خروجی:
(1, 2, 3, 4, 5, 6)
Set در پایتون
Set یا مجموعه در پایتون مجموعه ای از عناصر غیر مرتب هستند که یکتا و منحصر به فرد هم هستند. به این معنی که حتی اگر داده ها بیش از یک بار تکرار شود، فقط یک بار در مجموعه درج می شوند.
این مفهوم همان تعریف مجموعه هایی است که شما در ریاضی یاد گرفته اید. عملکردها نیز همانند مجموعه های حسابی هستند.
در ادامه کدهایی به عنوان نمونه مثال می بینید که به شما کمک می کنند تا درک بهتری داشته باشید.
ایجاد set در پایتون
مجموعه ها همانند دیکشنری ها با استفاده از پرانتزها ایجاد می شوند اما شما به جای افزودن جفت مقدار-کلید، فقط مقادیر را به آن وارد و ذخیره می کنید.
my_set = {1, 2, 3, 4, 5, 5, 5} #create set print(my_set)
خروجی:
{1, 2, 3, 4, 5}
اضافه کردن عناصر به set
برای افزودن عناصر ، از تابع add استفاده کرده و مقدار را به مجموعه اضافه می کنید.
my_set = {1, 2, 3} my_set.add(4) #add element to set print(my_set)
خروجی:
{1, 2, 3, 4}
عملگرهای نظریه مجموعه ها در set
استفاده از عملگرهای مختلف مجموعه مانند اجتماع ، اشتراک و غیره در زیر نشان داده شده است.
my_set = {1, 2, 3, 4} my_set_2 = {3, 4, 5, 6} print(my_set.union(my_set_2), '----------', my_set | my_set_2) print(my_set.intersection(my_set_2), '----------', my_set & my_set_2) print(my_set.difference(my_set_2), '----------', my_set - my_set_2) print(my_set.symmetric_difference(my_set_2), '----------', my_set ^ my_set_2) my_set.clear() print(my_set)
- تابع union داده های موجود در هر دو مجموعه را با هم اجماع می کند.
- تابع intersection اشتراک داده های موجود در هر دو مجموعه را می یابد.
- تابع difference همان عملگر تفاضل یک مجموعه از مجموعه دیگر است.
- symmetric_difference همان عملکرد تابع تفاضل را دارد اما داده هایی را که در هر دو مجموعه مشترک است، از هر دو حذف می کند و تفاضل فقط به صورت یکطرفه انجام نمی شود.
خروجی کد بالا:
{1, 2, 3, 4, 5, 6} ———- {1, 2, 3, 4, 5, 6} {3, 4} ———- {3, 4} {1, 2} ———- {1, 2} {1, 2, 5, 6} ———- {1, 2, 5, 6} set()
جمع بندی
اکنون که با ساختمان داده های تعبیه شده و موجود در پایتون آشنا شده اید، به شما پیشنهاد می کنم که در تمرین هایی با سوژه های متفاوت آنها را به کار ببرید تا به خوبی در ذهن شما باقی بمانند و در هر مسئله بتوانید ساختارهای لازم را به سرعت پیدا و استفاده کنید.
به عنوان آخرین نکته، اگر ساختارهای داده ترتیبی نیاز دارید، به سراغ list و tuple بروید، و اگر ساختار انتسابی کلید-مقدار می خواهید هم dictionary در دسترس شماست؛ در صورتی که ضروری است تا ساختمان داده شما یکتایی عناصر را حفظ کند، از set استفاده کنید.
منبع این مطلب آموزشی پست زیر است:
Data Structures You Need To Learn In Python
نوشته ساختمان داده های تعبیه شده در پایتون اولین بار در اوپن مایند. پدیدار شد.