2. Python : Tuple və metodları

Narmin Aliyeva
Pragmatech
Published in
4 min readAug 29, 2020

Keçən dəfəki məqaləmdə listlərdən danışdıq və qeyd etdiyim kimi bu dəfəki mövzumuz tuple-lardır. Tuple’lar da elə listlərə oxşayır lakin bir sıra fərqli cəhətlərinə görə fərqlənir.

Tuple:

  • Immutable (dəyişilməz)’dır.
  • Elementlər Parenthesis(mötərizələr) “()” içərisində yazılır.

Tuple necə yaranır?

Tuple yaratmaq üçün listdən fərqli olaraq () mötərizədən istifadə edirik, elementlər mötərizənin içərisində vergül ilə ayrılaraq yazılır. Tuple-da istənilən məlumat növündə element yerləşdirmək mümkündür.

# Boş tuple
tuple0 = ()
print(tuple0) # Output: ()

# İnteger-lardan ibarət tuple
tuple1 = (1, 2, 3)
print(tuple1) # Output: (1, 2, 3)

# Müxtəlif məlumat növündən ibarət tuple
tuple2 = (1, "Salam", 3.4)
print(tuple2) # Output: (1, "Salam", 3.4)

# İç-içə (nested) tuple
tuple3 = ("Salam", [8, 4, 6], (1, 2, 3))
print(tuple3) # Output: ("Salam", [8, 4, 6], (1, 2, 3))

Həmçinin, tuple-ları mötərizədən istifadə etmədən də yaza bilərik. Lakin yazdığımız kodun daha anlaşılan və gözəl olması üçün mötərizədən istifadə etmək məsləhət olunur. Əslində bunlar Pythonda packing olaraq tanınır. Bunun əksi olaraq, Pythonda unpacking termini də vardır ki, bunu da misal üzərində göstərək:

# packing
tuple1 = 3, 4.6, "salam"
print(tuple1) # Output: (3, 4.6, 'salam')
# unpacking
a, b, c = tuple1
print (a) # Output: (3)
print (b) # Output: (4.6)
print (c) # Output: ('salam')

Yuxarıda qeyd etdik ki, boş bir tuple yaratmaq mümkündür. Bundan başqa bir elementdən ibarət tuple da yaratmaq olar, lakin bu biraz çaşdırıcı ola bilər. Necə? Əgər ki biz tuple da bir element yerləşdirsək, Python bunu string kimi qəbul edir. Bəs biz tuple olaraq bir element qeyd etmək istəsək bunu necə edəcəyik? Misala baxaq :

s_tuple = ("salam")
print(type(s_tuple)) # Output : <class 'str'>

# Bir elementdən ibarət tuple yaratmaq üçün (,)-dən istifadə # etməliyik
tuple1 = ("salam",)
print(type(tuple1)) # Output : <class 'tuple'>

# Mötərizədən istifadə etməyə də bilərik
my_tuple = "hello",
print(type(my_tuple)) # Output : <class 'tuple'>

Yaxşı tuple-ları yaratdıq, içərisinə elementlərimizi yerləşdirdik. Bəs tuple içərisindəki elementləri necə oxuya bilərik? Bu zaman listdə də istifadə etdiyimiz Indeksləşdirmədən istifadə edəcəyik. İndi isə misallar üzərində tuple elementlərini necə ala bilərik ona baxaq:

Indeksləşdirmə:

I. Müsbət indeks istifadəsi:

Listlərdə olduğu kimi tuple-da da [] indeks operatorundan istifadə edəcəyik, hansı ki indeks 0-dan başlayır və yalnız integer tipində olur, yəni biz indeksləşdirmə üçün float yaxud digər tiplərdən istifadə edə bilmərik.

my_tuple = ('p','y','t','h','o','n')
#indeks 0 1 2 3 4 5
print(my_tuple[0]) # 'p'
print(my_tuple[5]) # 'n'

print(my_tuple[6]) # IndexError: list index out of range

print(my_tuple[2.0])
# TypeError: list indices must be integers, not float

# İç-içə (nested) tuple
n_tuple = ("salam", [8, 4, 6], (1, 2, 3))

print(n_tuple[0][3]) # 'a'
print(n_tuple[1][1]) # 4

II. Mənfi indeks istifadəsi:

Tuple-da da listdə olduğu kimi mənfi indeksləmə sondan [-1] ilə işarələnərək başlanılır və beləcə davam edir.

my_tuple = ('p','y','t','h','o','n')
#indeks -6 -5 -4 -3 -2 -1
print(my_tuple[-1]) # Output: 'n'

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

III. Slicing:

:(colon ) slicing operatorundan istifadə edərək tuple-da element aralığını əldə edə bilərik. Əgər indeksləməni aşağıdakı kimi təsəvvür etsək, yəni indeksin iki element arasında olduğunu nəzərə alsaq, bu zaman verilmiş aralıqdakı elementlərin əldə olunmasını daha yaxşı anlayarıq:

my_tuple = ('m', 'e', 'd', 'i', 'u', 'm')
# 0 1 2 3 4 5 6
# -6 -5 -4 -3 -2 -1
print(my_tuple[1:4]) # Output: ('e', 'd', 'i')

print(my_tuple[:-3]) # Output: ('m', 'e', 'd')

print(my_tuple[3:]) # Output: ('i', 'u', 'm')

print(my_tuple[:]) # Output: ('m', 'e', 'd', 'i', 'u', 'm')

Tuple-da element dəyişdirmək:

Listlərdən fərqli olaraq, tuple elementlərini dəyişdirmək olmur. Tuple dəyişilməzdir(immutable). Lakin belə bir istisnanı qeyd etmək olar ki, əgər tuple-ın dəyişmək istədiyimiz elementi dəyişə bilən(mutable) məlumat növü, məsələn, list olarsa, o zaman onu dəyişmək mümkündür. Misala baxaq:

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

my_tuple[1] = 9
print(my_tuple)
# TypeError: 'tuple' object does not support item assignment
# Tuple-ın elementini d
əyişmək mümkün olmadığı üçün error verecek
# Tuple-ın içərisindəki listin elementini dəyişsək
my_tuple[3][0] = 9 # Output: (4, 2, 3, [9, 5])
print(my_tuple)

Bundan əlavə, verilmiş tuple-a başqa bir tuple-ı təyin edə(reassigned) bilərik:

my_tuple = (1, 2, 3, [4, 5])my_tuple = ('m', 'e', 'd', 'i', 'u', 'm')print(my_tuple)             # Output: ('m', 'e', 'd', 'i', 'u', 'm')

Iki tuple toplama:

+ operatorundan istifadə edərək iki tuple-ı toplaya bilərik. Bu toplama concatenation adlanır. Həmçinin tuple içərisindəki elementləri * operatorundan istifadə edərək təyin olunmuş ədəd dəfə təkrarlada bilərik:

# Concatenation
print((1, 2, 3) + (4, 5, 6)) # Output: (1, 2, 3, 4, 5, 6)

# Təkrarlama
print(("tuple",) * 3) # Output: ('tuple', 'tuple', 'tuple')

Tuple silmək:

Tuple dəyişilməz olduğundan, tuple-a element əlavə etdikdən sonra həmin elementləri nə dəyişdirə, nə də silə bilərik. Lakin, bütöv tuple-ı silə bilirik. Bunun üçün də del açar sözündən istifadə edəcəyik:

my_tuple = ('m', 'e', 'd', 'i', 'u', 'm')

# del my_tuple[3]
# TypeError: 'tuple' object doesn't support item deletion
del my_tuple
print(my_tuple)
# Output - NameError: name 'my_tuple' is not defined

Tuple metodları:

Listlərdən fərqli olaraq, tuple-da iki metoddan istifadə etmək mümkündür:

tuple.count(element) və tuple.index(element, start, end)

Tuple.count(element) metodundan istifadə, verilmiş elementin tuple-da nə qədər olduğu dəyərini bizə qaytarır:

my_tuple = ('m', 'e', 'd', 'i', 'u', 'm')print(my_tuple.count('m'))     # Output: 2

Tuple.index(element, start, end) metodundan istifadə, verilmiş elementin tuple-dakı indeksini qaytarır:

my_tuple = ('m', 'e', 'd', 'i', 'u', 'm')print(my_tuple.index('d'))     # Output: 2

Start və end isə verilmiş element əgər bu aralıqdadırsa olduğu indeksi qaytarır, əks halda Error verir:

my_tuple = ('m', 'e', 'd', 'i', 'u', 'm')# 3-dən sonrakı 'm' - in indeksini çıxarır 
print(my_tuple.index('m', 3)) # Output: 5
# 1 ilə 6 arasındakı 'm' - in indeksini çıxarır
print(my_tuple.index('m', 1, 6)) # Output: 5

Mənbələr:

https://www.programiz.com/python-programming/tuple

--

--