تاپل در پایتون یک مجموعه ترتیبی و غیر قابل تغییر از مقادیر است. به کمک تاپلها میتوانیم چندین مقدار از نوعهای دادهای مختلف را در یک متغیر ذخیره کرده و روی آنها عملیات انجام دهیم. در این مقاله با ساختار دادهای tuple در پایتون و ترفندهای آن آشنا خواهید شد.
تاپل یک نوع کالکشن (collection) است که میتواند به تعداد نامحدودی مقدار را در خود نگهداری کند.
از نظر تعریف و استفاده، مشابه لیست در پایتون است. البته تفاوتیهای واضحی دارند که جلوتر با آنها آشنا میشویم. اگر با لیستها آشنا نیستید، پیشنهاد میکنم کار با listها را حتماً یاد بگیرید چون بسیار کاربردی هستند.
بر خلاف لیستها، مقادیر تعریف شده به صورت تاپل، غیر قابل تغییر هستند. یعنی وقتی یک تاپل با سه مقدار را ایجاد میکنیم، مقدار و تعداد آنها را نمیتوانیم تغییر دهیم.
فهرست محتوای آموزش
تعریف تاپل در پایتون
برای تعریف tuple در پایتون، عموماً از علامت پرانتز باز و بسته در ابتدا و انتهای آن استفاده میشود. مقادیر مورد نظرمان را هم با کاما (ویرگول انگلیسی یا ,
) از یکدیگر جدا میکنیم.
در زیر یک تاپل با پنج مقدار ایجاد کردهایم.
my_tuple = (217, "Omid", 23.471, 9, "SabzDanesh")
همانطور که میبینید، هر کدام از اعضای تاپل میتواند از نوع دادهای متفاوتی باشد. در این مثال از عدد و رشته در پایتون استفاده کرده بودیم؛ اما میتوانیم شئ (object) لیست یا یک تاپل دیگر نیز به کار ببریم!
اعضای تاپل لزوماً متفاوت از هم نیستند! مثلاً در زیر سه عدد را در یک تاپل قرار میدهیم.
tpl = (17, 14, 20)
اگر یک علامت پرانتز باز و بسته برای متغیری قرار دهیم، یک تاپل خالی درست کردهایم.
empty_tuple = ()
دقت داشته باشید که اگر تاپل ما شامل تنها یک عضو باشد، باید حتماً پس از تعریف عضو، علامت کاما نیز قرار دهیم.
test = (27,)
اگر علامت ,
را پس از عضو تکی در tuple قرار ندهیم، آن متغیر دیگر یک تاپل نبوده و نوعش از همان نوع عنصر عضو خواهد شد.
در تصویر زیر، نام سایت را به صورت رشته در علامت پرانتز قرار داده و به متغیر test انتساب دادهایم. وقتی نوع متغیر را بررسی میکنیم، میبینیم که رشته (string) تشخیص داده میشود.
دسترسی به اعضای تاپل
مشابه لیست یا رشته که دارای اندیس برای دسترسی به اعضای خود هستند، برای دسترسی به عناصر تاپل در پایتون از اندیسها (ایندکس یا index) استفاده میکنیم.
برای دسترسی به عضو nاُم کافی است نام تاپل را نوشته و درون کروشه ([]
) شماره اندیس خانه مورد نظر را بنویسیم.
اولین عضو یک تاپل دارای اندیس شماره صفر (0) و آخرین عضو آن (n اُمین) دارای اندیس n-1 است.
فرض کنید تاپل زیر را در اختیار داریم.
tpl = ("this", "is", "a", "test", "for", "tuples!")
برای دسترسی به عضو سوم این tuple باید اندیس 2 یا -4 را فراخوانی کنیم؛ به صورت زیر:
print( tpl[2] )
print( tpl[-4] )
دسترسی بازهای به عناصر
مشابه سایر دادههای از نوع مجموعه، عملیات slicing روی تاپل قابل انجام است. برای این کار کافی است بازه اندیسها را با علامت :
در هنگام فراخوانی تعریف کنیم.
tpl = ("this", "is", "a", "test", "for", "tuples!")
print( tpl[1:5] )
# Result:
# ('is', 'a', 'test', 'for')
در قطعه کد زیر، مثالهای بیشتری برای دسترسی به اعضای تاپل به همین روشها میبینید.
print( tpl[2:-1] )
# ('a', 'test', 'for')
print( tpl[-5:-1] )
# ('is', 'a', 'test', 'for')
print( tpl[-4:4] )
# ('a', 'test')
ویرایش تاپل در پایتون
تاپلها تغییر ناپذیر هستند. در انگلیسی به آنها immutable گفته میشود. بنابراین نخواهیم توانست مشابه لیستها اعضای یک تاپل را تغییر دهیم!
در تصویر زیر، یک تاپل تعریف کرده و میخواهیم مقدار خانه دوم آن را تغییر دهیم. همانطور که میبینید با خطای TypeError مواجه شدهایم.
اما نگران نباشید! در ادامه روشی را یاد میگیریم که خواهیم توانست با استفاده در مقادیر فعلی، یک تاپل جدید با اعضای جدید داشته باشیم.
افزودن عضو جدید به tuple
برای اتصال دو تاپل به یکدیگر از عملگر جمع (+
) استفاده میشود. در هنگام استفاده از این عملگر، مقادیر تاپل اول و دوم در کنار هم قرار گرفته و یک تاپل جدید ایجاد میشود.
دقت کنید که تاپلهای قبلی نه حذف میشوند و نه تغییر میکنند، فقط با اعضای آنها یک تاپل جدید ایجاد خواهد شد.
فرض کنید tuple1 و tuple2 را در اختیار داریم. در کد زیر با عملگر جمع، این دو تاپل را تجمیع کرده و tuple3 را ایجاد میکنیم.
tuple1 = ( "Test", "Element" )
tuple2 = ( 11, 37, 23 )
tuple3 = tuple1 + tuple2
نتیجه الصاق دو تاپل (concatenation) به صورت زیر میشود.
print( tuple3 )
# ('Test', 'Element', 11, 37, 23)
حذف عناصر تاپل
همانگونه که امکان تغییر یک عنصر در تاپل وجود ندارد، امکان حذف یک عنصر هم وجود ندارد. فقط میتوانیم کل تاپل را حذف کنیم.
برای حذف تاپل در پایتون، از کلمه کلیدی del
قبل از نام آن کمک میگیریم. با این کار، تمام اعضای تاپل و خود تاپل حذف خواهد شد.
tpl = ("Sara", "Elham", "Mohsen")
# Some Codes...
del tpl
دقت کنید که اگر پس از حذف تاپل، آن را صدا بزنیم، با خطایی مشابه زیر مواجه خواهیم شد. چون چنین متغیری در برنامه وجود ندارد.
اگر میخواهید مثالهای بیشتری در اینباره ببینید، به این سایت انگلیسی مراجعه کنید.
ترفندهای کار با تاپل پایتون
به کمک عملگرها و عبارات کلیدی میتوانیم حرفهایتر با tupleها کار کنیم. در ادامه چهار مورد از آنها را با هم بررسی میکنیم.
اندازه تاپل با تابع len
تابع len()
یک تاپل را به عنوان ورودی گرفته و تعداد اعضای موجود در آن را به ما بازمیگرداند.
tpl = ("Sara", "Elham", "Mohsen", "Omid")
len( tpl ) # 4
اتصال تاپلها به یکدیگر
در اواسط آموزش، برای افزودن عضو جدید به تاپل، دو tuple را به یکدیگر وصل کردیم. به این کار الحاق یا اصطلاحاً کانکَت (Concat) گفته میشود.
برای این کار، بین دو یا چند تاپل مورد نظر، از علامت جمع ریاضی (+
) استفاده میکنیم.
با این کار، تاپلها به هم وصل شده و یک تاپل بزرگتر شامل اعضای آنها ایجاد میشود.
tuple1 = ( "Test", "Element" )
tuple2 = ( 11, 37, 23 )
tuple3 = tuple1[1:] + tuple2[:-1]
print( tuple3 )
# Result:
# ('Element', 11, 37)
تکرار اعضای تاپل در پایتون
فرض کنید یک تاپل با دو عضو دارید. میخواهید این اعضا را تکرار کرده و در یک تاپل جدید قرار دهید.
برای این کار از علامت ضرب ریاضی (*
) استفاده میکنیم. فقط کافی است تاپل را در تعداد تکرار دلخواه خود ضرب کنیم. با این کار تاپلی جدید با تکرار دلخواه عناصر قبلی خواهیم داشت.
tpl = ("Sabz", "Danesh")
print( tpl*3 )
# Result:
# ('Sabz', 'Danesh', 'Sabz', 'Danesh', 'Sabz', 'Danesh')
بررسی وجود عنصر در تاپل
اگر بخواهیم وجود یک مقدار در تاپل را بررسی کنیم، از کلمه کلیدی in
استفاده خواهیم کرد. در سمت چپ in مقدار مورد نظر و در سمت راست آن tuple خود را قرار میدهیم.
خروجی این عبارت به صورت True یا False خواهد بود؛ پس میتوان از آن در ساختارهای شرطی پایتون نیز استفاده کرد.
tpl = (17, 25, 32, 37, 42, 50)
print( 32 in tpl ) #True
print( 35 in tpl ) #False
جمعبندی کوتاه
در این آموزش با تاپلها در پایتون آشنا شدیم. در برخی منابع فارسی، از تاپل با عنوان چندتایی نیز اسم برده شده است. tuple را با پرانتز مشخص میکنیم. اعضا و طول آن تغییر ناپذیر است و اگر بخواهیم عضو جدیدی به آن اضافه کنیم، از نظر فنی باید یک تاپل جدید ایجاد کنیم.
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش پایتون
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
من انجام دادم Erore داد هر کار کردم نشد
سلام
چه اروری؟ چه کاری میخواید انجام بدید که به خطا میخوره؟
روان، ساده و قابل فهمه توضیحات. ممنون
خوشحالیم براتون کاربردی بوده محمد عزیز
ممنون برای انرژی خوبت
سلام ببخشید من در مقایسه ی تاپل ها وقتی میخوام شرط تساوی تاپل ها رو بنویسم مثلا if (a=b) شرط تساوی ارور میده و فقط شرط کم (>) و زیادشو (<) میتونم تعیین کنم.
میشه بگید مشکل کجاست؟
درود
یه خطای کوچیک که احتمالاً مشکلتون از همین باشه. چرا عملگر مقایسه رو تک = گذاشتید؟ عملگر مقایسه دوتاییه، یعنی
==
. به نوع داده متغیر پایتونی هم ربطی نداره!سلام خسته نباشید
یک دستور میخوام متضاد destroy که بتونه یک پنجره را باز کنه(پنجره با toplevel نیست دو تا پنجره ساختم که همون اول یکی با destroy بسته میشه حالا اگر دوباره بخوام بازش کنم باید از چه دستپری استفاده کنم؟؟)
سلام
تا جایی که اطلاع داریم باید مجدد پنجره رو ایجاد کنید. اگه دیتای درونش مهمه، میتونید اونها رو در جایی ذخیره کنید و موقع ایجاد دوباره، اجزاش رو بسازید.
درود و خسته نباشید
ممنون از اموزش خوبتون
یه سوال داشتم این دستور تاپل تنها فرقی که با لیست داره تغییر ناپذیره. به غیر از این، امکانات دیگه ای داره که لیست نداشته باشه؟ اگه بخوایم از لیست استفاده کنیم فوقش دست نمیزنیم تغییرش نمیدیم اونوقت شبیه تاپل میمونه
خب اگر اینطوری باشه به نظرم تاپل بدردمون نمیخوره چون لیست دستش بازتره:))))
سلام
خیلی خوبه که بین اینها ارتباط برقرار میکنید و با هم مقایسهاشون میکنید. این کار به یادگیریتون خیلی کمک میکنه 🙂
فقط یه مورد کوچیکی رو اصلاح کنم: تاپل در پایتون یک دستور نیست، یک ساختمان داده هست. یعنی یک ساختاری که میتونیم دادههامون رو داخلش نگهداری کنیم.
برای تفاوتی که گفتید، حرفتون برای پروژههای ساده یا کوچیک تقریباً منطقیه! یعنی اگه از لیست استفاده کنیم ممکنه دستمون بازتر باشه. اما دقت کنید که تاپل و لیست به دلیل نوع پیادهسازی و ویژگیهایی که بهمون میدن، یکسری مزایا و معایب دارن. مثلاً تاپلها چون تغییر ناپذیرن، وقتی تعریف میشن، فضای مشخص (و کمتری نسبت به لیست) در حافظه اشغال میکنن و حتی در تعداد دادههای زیاد، پردازششون سریعتره. اما در مقایل، اون آزادی لیستها رو نداره!
امیدوارم به جوابت رسیده باشی سپهر عزیز. در مجموع، هر کدوم در جای خودشون میتونن کاربردی باشند.
سپاسگزارم .
بنده یک سوال داشتم که به چند روش میتوانیم مقادیر یک تاپل را تغییر دهیم؟
به شخصه متوجه این سوال نمیشوم لطف میکنید اگر پاسخ بدهید.
سلام. تاپل در پایتون تغییر ناپذیر هست. یعنی مقادیرشون رو نمیشود تغییر داد. یک راهحل ساده برای تغییر مقادیر، این است که ابتدا با
list()
تبدیل تاپل به لیست را انجام داده، تغییرات را در لیست اعمال کرده و سپس باtuple()
آن را جایگزین متغیر قبلی کنید.متشکرم پس به طور کلی باید گفت تاپل در پایتون تغییر ناپذیر است.
لطف کردید سپاسگزارم بابت توضیحات خوانا و روان شما.
سپاسگزارم. خیلی روان توضیح دادید
خوشحالم که برای یادگیری خودتون وقت میذارید و به ما انرژی میدید.