Python’da Demet (Tuple)
Bu makalede Python tuple (demet) veri tipi hakkında bilgiler edineceksiniz. Daha spesifik olarak tuple nedir, tuple nasıl oluşturulur, tuple ne zaman kullanılırlar ve aşina olmanız gereken çeşitli yöntemlere değineceğiz..
Python’daki tuple, listelere benzer. Python’da liste ile tuple arasındaki fark, bir tuple oluşturulduktan sonra öğelerininin değişmez olmasıdır.
Bir Tuple Oluşturma
Tüm öğeleri virgülle ayıracak şekilde parantez “()” içine yerleştirilerek bir tuple oluşturulur. Bir tuple herhangi bir sayıda öğeye sahip olabilir ve bunlar farklı türlerde olabilir (tamsayı, kayan nokta, liste, dize vb.).
Not: Prantez kullanımı zorunlu değildir ancak kullanılması kodu daha anlaşılır yapacağından kullanılması tavsiye edilir.
1 2 3 4 5 6 7 8 9 10 | bos_tuple = () # Boş Tuple tam_sayi_tuple = (1, 2, 3) # Tam sayı tutan tuple print(tam_sayi_tuple) # Çıktı: (1, 2, 3) karisik_tuple = (1, "Python Dersleri", 3.4) # Karışık veri tipi tutan tuple print(karisik_tuple) # Çıktı: (1, "Python Dersleri", 3.4) ic_ice_tuple = ("mouse", [8, 4, 6], (1, 2, 3)) # İç içe tuple print(ic_ice_tuple) # Çıktı: ("mouse", [8, 4, 6], (1, 2, 3)) |
Çıktı
1 2 3 4 | <samp>() (1, 2, 3) (1, 'Merhaba', 3.4) ('fare', [8, 4, 6], (1, 2, 3))</samp> |
Parantez kullanmadan da bir demet oluşturulabilir. Bu, demet paketleme olarak bilinir.
1 2 3 4 5 6 7 8 9 | my_tuple = 3, 4.6, "dog" print(my_tuple) # tuple unpacking is also possible a, b, c = my_tuple print(a) # 3 print(b) # 4.6 print(c) # dog |
Çıktı
1 2 3 4 | <samp>(3, 4.6, 'köpek') 3 4.6 köpek</samp> |
Tek elemanlı bir demet oluşturmak biraz zor.
Parantez içinde bir eleman olması yeterli değildir. Aslında bir demet olduğunu belirtmek için sonunda bir virgüle ihtiyacımız olacak.
1 2 3 4 5 6 7 8 9 10 | my_tuple = ("hello") print(type(my_tuple)) # <class 'str'> # Creating a tuple having one element my_tuple = ("hello",) print(type(my_tuple)) # <class 'tuple'> # Parentheses is optional my_tuple = "hello", print(type(my_tuple)) # <class 'tuple'> |
Çıktı
1 2 3 | <samp><sınıf 'str'> <sınıf 'tuple'> <sınıf 'tuple'></samp> |
Tuple Öğelerine Erişim
Bir demetin elemanlarına erişmenin çeşitli yolları vardır.
1. İndeksleme
[]
Dizinin 0’dan başladığı bir tanımlama grubundaki bir öğeye erişmek için dizin operatörünü kullanabiliriz .
Bu nedenle, 6 elemanlı bir demet 0’dan 5’e kadar indekslere sahip olacaktır. Tuple indeks aralığının (bu örnekte 6,7,…) dışında bir indekse erişmeye çalışmak bir IndexError
.
Dizin bir tamsayı olmalıdır, bu nedenle kayan nokta veya diğer türleri kullanamayız. Bu sonuçlanacaktır TypeError
.
Benzer şekilde, aşağıdaki örnekte gösterildiği gibi, iç içe dizilere yuvalanmış dizin oluşturma kullanılarak erişilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Accessing tuple elements using indexing my_tuple = ('p','e','r','m','i','t') print(my_tuple[0]) # 'p' print(my_tuple[5]) # 't' # IndexError: list index out of range # print(my_tuple[6]) # Index must be an integer # 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 print(n_tuple[0][3]) # 's' print(n_tuple[1][1]) # 4 |
Çıktı
1 2 3 4 | <samp>p t s 4</samp> |
2. Negatif İndeksleme
Python, dizileri için negatif indekslemeye izin verir.
-1 dizini son öğeye, -2 ikinci son öğeye vb.
1 2 3 4 5 6 7 8 | # Negative indexing for accessing tuple elements my_tuple = ('p', 'e', 'r', 'm', 'i', 't') # Output: 't' print(my_tuple[-1]) # Output: 'p' print(my_tuple[-6]) |
Çıktı
1 2 | <samp>t p</samp> |
3. Dilimleme
Dilimleme operatörünü iki nokta üst üste kullanarak bir tanımlama grubundaki bir dizi öğeye erişebiliriz :
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # Accessing tuple elements using slicing my_tuple = ('p','r','o','g','r','a','m','i','z') # elements 2nd to 4th # Output: ('r', 'o', 'g') print(my_tuple[1:4]) # elements beginning to 2nd # Output: ('p', 'r') print(my_tuple[:-7]) # elements 8th to end # Output: ('i', 'z') print(my_tuple[7:]) # elements beginning to end # Output: ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z') print(my_tuple[:]) |
Çıktı
1 2 3 4 | <samp>('r', 'o', 'g') ('p', 'r') ('i', 'z') ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')</samp> |
Dilimleme, indeksin aşağıda gösterildiği gibi öğeler arasında olduğu düşünülerek en iyi şekilde görselleştirilebilir. Bu nedenle, bir aralığa erişmek istiyorsak, demetten bölümü dilimleyecek dizine ihtiyacımız var.

Bir Tuple’ı Değiştirme
Listelerin aksine, demetler değişmezdir.
Bu, bir demetin elemanları atandıktan sonra değiştirilemeyeceği anlamına gelir. Ancak, öğenin kendisi liste gibi değişken bir veri türüyse, iç içe geçmiş öğeleri değiştirilebilir.
Ayrıca farklı değerlere bir demet atayabiliriz (yeniden atama).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # Changing tuple values my_tuple = (4, 2, 3, [6, 5]) # TypeError: 'tuple' object does not support item assignment # my_tuple[1] = 9 # However, item of mutable element can be changed my_tuple[3][0] = 9 # Output: (4, 2, 3, [9, 5]) print(my_tuple) # Tuples can be reassigned my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z') # Output: ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z') print(my_tuple) |
Çıktı
1 2 | <samp>(4, 2, 3, [9, 5]) ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')</samp> |
+
Operatörü iki tuple’ı birleştirmek için kullanabiliriz . Buna birleştirme denir .
Ayrıca operatörü kullanarak bir demet içindeki öğeleri belirli bir sayıda tekrarlayabiliriz .*
Her ikisi de +
ve *
işlemler yeni bir Tuple ile sonuçlanır.
1 2 3 4 5 6 7 | # Concatenation # Output: (1, 2, 3, 4, 5, 6) print((1, 2, 3) + (4, 5, 6)) # Repeat # Output: ('Repeat', 'Repeat', 'Repeat') print(("Repeat",) * 3) |
Çıktı
1 2 | <samp>(1, 2, 3, 4, 5, 6) ('Tekrar', 'Tekrar', 'Tekrar')</samp> |
Bir Tuple’ı Silme
Yukarıda tartışıldığı gibi, bir demet içindeki öğeleri değiştiremeyiz. Bu, bir demetten öğeleri silemeyeceğimiz veya kaldıramayacağımız anlamına gelir.
Bununla birlikte, bir demeti tamamen silmek, del anahtar sözcüğünü kullanarak mümkündür .
1 2 3 4 5 6 7 8 9 10 11 12 | # Deleting tuples my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z') # can't delete items # TypeError: 'tuple' object doesn't support item deletion # del my_tuple[3] # Can delete an entire tuple del my_tuple # NameError: name 'my_tuple' is not defined print(my_tuple) |
Çıktı
1 2 3 | <samp>Geri izleme (en son arama son): Dosya "<string>", satır 12, <module> içinde NameError: 'my_tuple' adı tanımlı değil</samp> |
Tuple Yöntemleri
Öğe ekleme veya öğe kaldırma yöntemleri, Tuple ile kullanılamaz. Yalnızca aşağıdaki iki yöntem kullanılabilir.
Python demeti yöntemlerinin bazı örnekleri:
1 2 3 4 | my_tuple = ('a', 'p', 'p', 'l', 'e',) print(my_tuple.count('p')) # Output: 2 print(my_tuple.index('l')) # Output: 3 |
Çıktı
1 2 | <samp>2 3</samp> |
Diğer Tuple İşlemleri
1. Grup Üyelik Testi
Anahtar sözcüğünü kullanarak bir öğenin bir demet içinde olup olmadığını test edebiliriz in
.
1 2 3 4 5 6 7 8 9 | # Membership test in tuple my_tuple = ('a', 'p', 'p', 'l', 'e',) # In operation print('a' in my_tuple) print('b' in my_tuple) # Not in operation print('g' not in my_tuple) |
Çıktı
1 2 3 | <samp>Doğru Yanlış Doğru</samp> |
2. Bir Tuple Üzerinden Yineleme
Bir demet içindeki her bir öğeyi yinelemek için bir for
döngü kullanabiliriz.
1 2 3 | # Using a for loop to iterate through a tuple for name in ('John', 'Kate'): print("Hello", name) |
Çıktı
1 2 | <samp>merhaba John Merhaba Kate</samp> |
Tuple’ın List’e Göre Avantajları
Tuple’lar listelere oldukça benzer olduğundan, her ikisi de benzer durumlarda kullanılır. Ancak, bir liste yerine bir tanımlama grubu uygulamanın bazı avantajları vardır. Aşağıda listelenen ana avantajlardan bazıları şunlardır:
- Genellikle heterojen (farklı) veri türleri için tanımlama grupları ve homojen (benzer) veri türleri için listeler kullanırız.
- Tuple’lar değişmez olduğundan, bir tuple üzerinden yineleme yapmak listeden daha hızlıdır. Yani hafif bir performans artışı var.
- Değişmez öğeler içeren demetler, bir sözlük için anahtar olarak kullanılabilir. Listelerle bu mümkün değildir.
- Değişmeyen verileriniz varsa, bunları Tuple olarak uygulamak, yazmaya karşı korumalı kalmasını garanti eder.