آموزش تاپل ها (tuple) در پایتون (Python)
در این مطلب، به طور خیلی کامل از صفر تا صد تاپل ها (tuple) رو در پایتون (Python) آموزش میدیم! و با کلی مثال و تمرین، مبحث رو کاملاً یاد خواهید گرفت!
در جلسه پیش با لیست ها آشنا شدیم! در این جلسه با یک ساختار داده (Data Structure) دیگه در پایتون (Python) آشنا میشویم به اسم تاپل (tuple)!
تاپل نیز به به لحاظ کاربرد شبیه لیست است! اما قطعاً فرق هایی دارند! و چه بخواید و چه نخواید باید این موارد رو یاد بگیرید! چون بعدها توی آموزش های بعدی میگیم فلان چیزی که نوشتیم خروجیش رو در قالب یک تاپل (tuple) داد! و اونجا شما باید بفهمید ما داریم چی میگیم و این ساختار داده ها (حالا نه لزوماً تاپل (tuple)) هم بسیار پرکاربرد اند!
ساخت تاپل (tuple)
فرض کنید میخوایم یک تاپل که اعداد 1 و 5 و 7 و 8 دارد را بسازیم و اسم آن را a قرار دهیم! در این صورت داریم:
a=(1,5,7,8)
print(a)
در خط اول که تاپل رو تعریف کردیم و اسمش رو گذاشتیم a و در خط دوم هم گفتیم همون a رو برامون پرینت کنه! که خروجیش میشه:!
(1, 5, 7, 8)
شاید بگید این با لیست چه فرقی کرد؟! جواب اینه که در ادامه میگیم، با ما همراه باشید!
یک سری جنگولک بازی ها!
در این بخش قراره شما رو به چالش بکشیم! پس حواستون رو جمع کنید! قطعه کد زیر رو در نظر بگیرید!
b=(1)
print(type(b))
در خط اول که b رو تعریف کردیم! در خط دوم هم داریم نوع b (معنی کلمه type “نوع” است) رو پرینت میکنیم! به نظرتون خروجی این قطعه کد چه خواهد بود؟! (یعنی نوع b چه خواهد بود؟!)
احتمال خیلی زیاد میگید خب این یک tuple یک عضوی است دیگه! اما جواب اینه که خیر! این یک تاپل تک عضوی نیست!! به خروجی زیر دقت کنید!
<class 'int'>
بله همینطور که میبینید نوشته int یعنی integer (به معنی عدد “صحیح”)! قطعاً تعجب میکنید! میگید چرا اینو به عنوان یک عدد در نظر گرفته! مگر نمیبینه من دورِ 1 پرانتز گذاشتم! پس باید tuple در نظر بگیره دیگه!
ولی اینجوری نیست!!
دلیلش اینه که نشونه تاپل، اصلا پرانتز نیست! نشونه tuple در واقع کاما است! (قطعاً میدونید که به “,” میگن کاما)!
خب با این اوصاف بیاید اینجوری بنویسیم:!
a=1,
print(type(a))
خروجی میده!:
<class 'tuple'>
دیدین نشونه تاپل , بود و نه () ؟!
یا حتی ممکنه یکی دوست داشته باشه یک tuple تک عضوی رو به صورت زیر نمایش بده:!
c=(1,)
print(type(c))
و اشکال نداره و بازهم همون خروجی رو میده و نوع رو تاپل اعلام میکنه! اما واقعیت اینه که , نشونه تاپل است! این نکته مهمی بود!
اما مرسومه tuple رو داخل پرانتز میذارن! ولی بازهم برای چهارمین بار (فکر کنم البته) میگم که نشونه تاپل , است! نه چیز دیگه! برای اینکه دیگه خیالتون جمع باشه، مثال زیر رو در نظر بگیرید:!
d=2,3,4,5,7,8
print(type(d))
خروجی این بنده خدا هم میشه!
<class 'tuple'>
فرق لیست (list) و تاپل (tuple) چیست؟!
✔ در تاپل امکان عوض کردن مولفهها، اضافه کردن مولفه و … (که در لیست وجود داشت) وجود نداره! یا اصطلاحاً میگن tuple یم ساختار داده immutable (به معنی “تغییر ناپذیر”) است!
شاید اعتراض کنید که این چه وضعشه! این تازه یه چیزی هم از لیست کمتر داره! چرا باید اینو یاد بگیریم؟!
جواب اول که شدیداً قانع کننده است اینه که مجبورید! چون حداقلش اینه که خروجی یه عالمه از چیزها که در ادامه و در پکیج های مختلف میبینید tuple است!
اما جواب دوم اینه که کاربرد دارن واقعاً ! یه جاهایی ممکنه شما نخواین مثل لیست یک چیز رو بشه عوض کرد! و بخواین بدون تغییر تا آخر برنامه بمونه!
مثلاً خروجی اینکه یک ماتریس چند در چنده! (که اتفاقا بعدها در یکی از پکیج ها میبینید که اون هم خروجیش به صورت تاپل است!)
اما در هر صورت شما باید اینو یاد بگیرید! چون قطعاً بعدها اینو خواهید دید! اما نمیشه کتمان کرد که کاربرد لیست (list) بیشتره!
تابع tuple
این تابع میاد چیزی که بهش میدیم رو به تاپل تبدیل میکنه!
مثال1: قطعه کد زیر رو در نظر بگیرید!
e=[2,5,7,8]
f=tuple(e)
print(f)
print(type(f))
در خط اول، یک لیست تعریف کردیم به اسم e! در خط دوم همون لیست رو تبدیل میکنیم به tuple و تبدیل شدش رو میریزیم توی متغیری به اسم f !
در خط سوم میایم f رو پرینت میکنیم! و در خط آخر هم نوع f رو پرینت میکنیم!
که خروجی قطعه کد بالا میشه:
(2, 5, 7, 8)
<class 'tuple'>
مثال 2: بازهم قطعه کد زیر رو در نظر بگیرید!
g=range(1,6)
h=tuple(g)
print(h)
print(type(h))
در خط اول اومدیم از تابع range استفاده کردیم و اعداد 1 تا 5 رو در متغیری به اسم g ریختیم! (چرا 6 رو نگفتم! مگه ننوشتیمش؟! دلیلش رو میتونید مراجعه کنید به پست زیر و اونجا یاد بگیرید! پایتون اون آخری رو در نظر نمیگیره! یکی کمترش رو در نظر میگیره!)
آموزش تابع range در پایتون (python)
در خط دوم هم همون چیزایی که در خط اول گفتیم رو اومدیم به tuple تبدیل میکنیم و میریزیم توی متغیری به اسم h !
حالا در خط سوم میایم خود h و در خط آخر نوع h رو پرینت میکنیم! که خروجیش میشه!
(1, 2, 3, 4, 5)
<class 'tuple'>
تاپل های تو در تو (nested tuples)
این اسمش خیلی خوف و خفنه! وگرنه چیز خاصی نیست! اگر توی یک تاپل، یک tuple تعریف کنیم، میشه nested tuples یا تاپل های تو در تو! مثلاً قطعه کد زیر رو در نظر بگیرید!
i=(("Sajjad",12),("Ali Reza",20),2,5,10)
که در واقع یک تاپل هست به اسم i ! که مولفه اول این تاپل خودش یک tuple دیگهاس! در مولفه دوم هم یک tuple دیگه داریم! و در مولفه سوم، عدد 2، در مولفه چهارم عدد 5 و در مولفه پنجم عدد 10 رو داریم!
مثلاً فرض کنید میخوایم به مولفه اول این تاپل دسترسی پیدا کنیم! میدونیم اندیس گذاری در پایتون از صفر شروع میشه! (از کجا میدونیم؟ از مطلب زیر که در تابع range همون اوایلش کلی در درباره اندیس گذاری در python توضیح دادیم!)
آموزش تابع range در پایتون (python)
پس مینویسیم:
print(i[0])
که خروجی زیر رو میده!
('Sajjad', 12)
اگر نمی دونید که منظورمون از دسترسی پیدا کردن چیه! و یا نمیدونید که چرا مثلاً مینویسیم i[0] ، در این صورت قبلش باید مراجعه کنید به مطلب زیر، تا بعد اینجا رو متوجه بشید:
آموزش لیست ها (list) در پایتون (python)
حالا فرض کنید بخوایم از مولفه اول تاپلِ i (یعنی همون i[0]) مولفه دومش رو دسترسی پیدا کنیم! داریم!
i=(("Sajjad",12),("Ali Reza",20),2,5,10)
print(i[0][1])
که در بالا میگیم، از اندیس صفر تاپلِ صفر، بیا حالا اندیس یک اُمش رو چاپ کن!
آموزش های پیشنهادی از مجموعه پایتون (Python):
آموز تولید عدد تصادفی از حدود 20 توزیع
آموزش ایجاد ماتریس با پایتون
آموزش تابع eval