جلسه هشتم دوره پایتون – معرفی Tuple ها و کار با آنها

مقدمه

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

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

Tuple چیست ؟

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

ساخت یک تاپل : 

در زیر مثال هایی از ساخت یک Tuple را مشاهده می کنید: 

>>> t1 = () # creates an empty tuple with no data
 
>>> t2 = (11,22,33)
 
>>> t3 = tuple([1,2,3,4,4]) # tuple from array
 
>>> t4 = tuple("abc") # tuple from string

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

دسترسی به المان های یک Tuple

راه های مختلفی برای دسترسی به المان های یک تاپل وجود دارد که  در زیر به آنها میپردازیم : 

 اندیس گذاری: 

با استفاده از اپراتور اندیس (که با نماد [] مشخص می شود.) میتوانیم به المان های یک Tuple دسترسی پیدا کنیم. در این حالت اندیس ها از 0 شروع می شوند. بنابراین برای یک تاپل با 6 عضو ، اندیس ها از 0 تا 5 شماره گذاری می شوند و اگر تلاش کنیم تا به اندیس های بالاتر ( مثل 6 و 7 و … ) دسترسی پیدا کنیم ، با ارور مواجه خواهیم شد. علاوه بر آن واضح است که Index باید یک عدد صحیح باشد و اگر یک Index را عددی اعشاری بگذاریم با خطا مواجه می شویم. 

مشابه لیست ها میتوانیم تاپل ها تو در تو داشته باشیم که در این صورت با اندیس های تو در تو نیز میتوانیم به اعضای آن دسترسی داشته باشیم.  برای واضح تر شدن بحث مثال زیر را ببینید: 

my_tuple = ('p','e','r','m','i','t')

# Output: 'p'
print(my_tuple[0])

# Output: 't'
print(my_tuple[5])

# index must be in range
# If you uncomment line 14,
# you will get an error.
# IndexError: list index out of range

#print(my_tuple[6])

# index must be an integer
# If you uncomment line 21,
# you will get an error.
# TypeError: list indices must be integers, not float

#my_tuple[2.0]

# nested tuple
n_tuple = ("mouse", [8, 4, 6], (1, 2, 3))

# nested index
# Output: 's'
print(n_tuple[0][3])

# nested index
# Output: 4
print(n_tuple[1][1])

اگر این کد را اجرا کنیم نتیجه به صورت زیر خواهد بود :

p
t
s
4

 اندیس گذاری منفی: 

در تاپل ها نیز مثل لیست ها میتوانیم از اندیس گذاری منفی استفاده کنیم. اندیس 1- به آخرین عضو یک تاپل اشاره می کند و اندیس 2- به یکی مانده به آخرین عضو و به همین شکل. نمونه ای از این نوع اندیس گذاری در زیر آورده شده است :

my_tuple = ('p','e','r','m','i','t')

# Output: 't'
print(my_tuple[-1])

# Output: 'p'
print(my_tuple[-6])

اگر این کد را اجرا کنیم نتیجه به صورت زیر خواهد بود: 

t
p

تغییر دادن یک Tuple

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

my_tuple = (4, 2, 3, [6, 5])

# we cannot change an element
# If you uncomment line 8
# you will get an error:
# TypeError: 'tuple' object does not support item assignment

#my_tuple[1] = 9

# but item of mutable element can be changed
# Output: (4, 2, 3, [9, 5])
my_tuple[3][0] = 9
print(my_tuple)

# tuples can be reassigned
# Output: ('r', 'o', 'b', 'o', 'u', 'a', 'v', 'i', 'r')
my_tuple = ('r','o','b','o','u','a','v','i','i')
print(my_tuple)

اگر کد بالا را اجرا کنیم نتیجه به صورت زیر خواهد بود: 

(4, 2, 3, [9, 5])
('r', 'o', 'b', 'o', 'u', 'a', 'v', 'i', 'r')
(4, 2, 3, [9, 5])
('r', 'o', 'b', 'o', 'u', 'a', 'v', 'i', 'r')

در بخش اول کد توانستیم یکی از اعضای لیست موجود در Tuple را تغییر دهیم. در بخش دوم هم به صورت کامل Tuple را از اول عضو دهی کردیم. 

حذف Tuple

همانطور که در بالا بحث کردیم نمیتوانیم اعضای یک Tuple را تغییر دهیم و یا حذف کنیم. اما میتوانیم به صورت کامل یک Tuple را حذف کنیم. این کار با استفاده از کلمه کلیدی del قابل انجام است. در زیر مثالی از این موضوع آورده شده است : 

my_tuple = ('r','o','b','o','u','a','v','i','')

# can't delete items
# if you uncomment line 8,
# you will get an error:
# TypeError: 'tuple' object doesn't support item deletion

#del my_tuple[3]

# can delete entire tuple
# NameError: name 'my_tuple' is not defined
del my_tuple
my_tuple

نتیجه اجرای کد بالا به صورت زیر می باشد:

Traceback (most recent call last):
  File "<stdin>", line 13, in <module>
    my_tuple
NameError: name 'my_tuple' is not defined

توابع Tuple

از توابعی مانند min یا max یا sum یا len را میتوان در Tuple ها هم استفاده کرد. مثال های زیر گویای همه چیز است: 

>>> t1 = (1, 12, 55, 12, 81)
>>> min(t1)
1
>>> max(t1)
81
>>> sum(t1)
161
>>> len(t1)
5

 تکه تکه کردن tuple ها : 

مشابه با لیست ها میتوان tuple ها را نیز تکه تکه کرد. این کار با استفاده از [] انجام می شود و تنها کافی است عدد ابتدا و انتهایی آن tuple را بنویسید. به مثال زیر دقت کنید: 

>>> t = (11,22,33,44,55)
>>> t[0:2]
(11,22)

 عملگر in و not in : 

با استفاده از عملگر in و not in میتوانیم عضو بودن یک المان در یک tuple را چک کنیم. 

>>> t = (11,22,33,44,55)
>>> 22 in t
True
>>> 22 not in t
False

خوب دوستان. به پایان این جلسه هم رسیدیم. مثل همیشه برای اطلاع از جلسات جدید سایت و مطالب آموزشی دیگر میتوانید ما را در تلگرام و یا اینستاگرام دنبال کنید: 

اشتراک گذاری:
مطالب زیر را حتما بخوانید

2 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

دیدگاهتان را بنویسید