Python ile Tuple (Demet) Kullanımı
Python programlama dilinde tuple (Türkçe: demetler), platformda gömülü halde bulunan “List“, “Set” ve “Dictionary” ile beraber veri koleksiyonlarını depolamak için kullanılan dört veri tipinden biridir. Biz bu yazımızda, Python’daki demetlerin ne olduğunu, nasıl oluşturulup kullanıldığını adım adım inceleyeceğiz.
Python’da Tuple
Python’da tuple veri tipi, her ne kadar listelere benze de birkaç önemli farkla onlardan ayrılırlar. Tıpkı listeler gibi yinelenen değerlere sahip olup indeks numaraları ile onlara ulaşılabilse de, listelerden farklı olarak değiştirilemez (immutable) olmasıdır. Haliyle tuple kullanılarak oluşturulmuş bir koleksiyona “ekleme”, “silme” ve “güncelleme” yapılamaz.
Tuple’ların tanımlanmasında normal parantezler ()
kullanılır ve içindeki elemanlar virgül ile ayrılır. Örneğin, farklı sebze isimlerini tuple içinde saklamak istediğimizi düşünelim. Bunu aşağıdaki gibi yazabiliriz:
1 |
sebzeler = ("patlıcan", "brokoli", "havuç", "ıspanak") |
Yukarıdaki örnekte, sebzeler
adında bir tuple oluşturduk ve içerisine dört farklı sebze ismi ekledik. Bu tuple üzerinden elemanlara, indeks numaralarıyla erişebiliriz. Listelere benzer şekilde indeks numarası 0’dan başlar. Örneğimiz üzerinden gösterecek olursak; sebzeler[1]
bize “brokoli” sonucunu döndürecektir. Bunu şu şekilde de düşünebiliriz: (“patlıcan”0, “brokoli”1, “havuç”2, “ıspanak3“)
Tuple koleksiyonu, içerisinde herhangi bir veri türünden elemanlar barındırabilir. Örneğin, bir sayı, bir metin, bir liste ve hatta başka bir tuple bile bu koleksiyonun içinde yer alabilir:
1 |
ornek_tuple = (5, "Merhaba", [1, 2, 3], (a, b, c)) |
Bu örnekte, ornek_tuple
adlı tuple’ımızın içerisinde bir tam sayı (5), bir metin (“Merhaba”), bir liste ([1, 2, 3]) ve başka bir tuple ((a, b, c)) bulunmaktadır. Bu özellik, tuple’ları oldukça esnek kılar ve farklı senaryolarda kullanılabilir hale getirir.
O halde, tek bir cümle kurarak Python’da tuple’ların ne olduğunu şu şekilde özetleyebiliriz: Tuple koleksiyonları, normal parantezler içerisinde (()
) birbirlerinden virgülle ayrılmış elemanlardan oluşan, sıralı, değiştirilemez ve herhangi bir veri tipinde eleman barındırabilen veri koleksiyonlarıdır.
List veri tipinden farklı olarak tupples değiştirilemez, ilk tanımlandığı şekilde kalır dedik. Belli başlı senaryolar ışığında koleksiyonumuza ekleme, silme, sıra (index) değiştirme işlemi yapmamız gerekebilir.
İşte böyle durumlar için tuple koleksiyonumuzu list()
metodu kullanılarak önce liste tipine dönüştürebiliriz. Bu sayede koleksiyon üzerinde gerekli değişiklikleri liste üzerinden yapabilir ve tuple()
metodunu kullanarak tekrardan koleksiyonumuzu tuple’a dönüştürebiliriz. Bakınız:
1 2 3 4 5 6 7 8 9 10 11 12 |
sebzeler = ("brokoli", "lahana", "karnabahar") print(sebzeler) # Çıktı: ('brokoli', 'lahana', 'karnabahar') # Tuple'ı listeye dönüştürme sebzeler_listesi = list(sebzeler) # Liste üzerinde değişiklik yapma sebzeler_listesi[1] = "marul" # Listeyi tekrar tuple'a dönüştürme sebzeler = tuple(sebzeler_listesi) print(sebzeler) # Çıktı: ('brokoli', 'marul', 'karnabahar') |
Yukarıdaki örneğimizde, “lahana” kelimesini “marul” ile değiştirdik. Ancak doğrudan tuple üzerinde bu değişikliği yapamadığımız için tuple’ı önce bir listeye dönüştürdük, gerekli değişikliği yaptık ve sonra tekrar tuple’a çevirdik.
Belirtmek isterim ki bu işlem, büyük veri kümeleriyle çalışırken performansı etkileyebilir, bu nedenle dikkatli kullanılmalıdır.
Python’da Tuple Elemanlarına Nasıl Erişebiliriz?
Tuple içindeki elemanlara erişirken, tıpkı listelerde olduğu gibi indeks numaralarını kullanabiliriz. Detaylı anlatımı listelerde yaptığımız için burada genel bir özet olarak nasıl kullanıldığını maddeler halinde derledik:
- Basit indeksleme:
1 2 3 |
meyveler_tuple = ("elma", "portakal", "kavun") print(meyveler_tuple[-1]) # çıktı: kavun |
- Dilimleme ile elemanlara erişme: Bir tuple içerisinde belirli bir aralıktaki elemanları seçmek için dilimleme (slicing) yöntemini kullanabiliriz.
1 2 3 |
sayilar_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) print(sayilar_tuple[2:7]) # çıktı: (2, 3, 4, 5, 6) |
- Dilimleme ile adım sayısı belirleme:
1 2 |
sayilar_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) print(sayilar_tuple[1:9:2]) # çıktı: (1, 3, 5, 7) |
- Başlangıç ve bitiş indeksleri olmadan dilimleme:
1 2 3 4 5 |
sayilar_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) print(sayilar_tuple[:5]) # çıktı: (0, 1, 2, 3, 4) print(sayilar_tuple[5:]) # çıktı: (5, 6, 7, 8, 9) print(sayilar_tuple[::2]) # çıktı: (0, 2, 4, 6, 8) |
- Negatif indekslerle dilimleme:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
hayvanlar_tuple = ("aslan", "kaplan", "panda", "ayı", "kanguru") dilimlenmis_tuple = hayvanlar_tuple[-4:-1] print(dilimlenmis_tuple) # Çıktı: ('kaplan', 'panda', 'ayı') sehirler_tuple = ("İstanbul", "Ankara", "İzmir", "Bursa", "Adana", "Antalya") ters_dilimlenmis_tuple = sehirler_tuple[::-1] print(ters_dilimlenmis_tuple) # Çıktı: ('Antalya', 'Adana', 'Bursa', 'İzmir', 'Ankara', 'İstanbul') renkler_tuple = ("kırmızı", "mavi", "yeşil", "sarı", "mor") ters_dilimlenmis_renkler = renkler_tuple[::-2] print(ters_dilimlenmis_renkler) # Çıktı: ('mor', 'yeşil', 'kırmızı') |
Python’da “Tuple” ile “Liste” Arasındaki Farklar
Python’da list ve tuple arasındaki farkları aşağıdaki tablodaki gibi özetleyebiliriz:
Özellik | List | Tuple |
---|---|---|
Sözdizimi | Köşeli parantez [] | Normal parantez () |
Değiştirilebilir | Evet (mutable) | Hayır (immutable) |
Eleman Ekleme/Çıkarma | Mümkün | Mümkün değil |
Performans | Yavaş | Hızlı |
İçerik | Değiştirilebilir | Sabit |
Metot sayısı | Fazla | Az |
Yukarıdaki tablo, tuple ve liste arasındaki temel farkları kapsamlı bir şekilde özetlemektedir. Her iki veri tipi de kendi kullanım alanlarına ve avantajlarına sahiptir. Hangi yapının kullanılacağına karar verirken bu farkları göz önünde bulundurmak gerekir.
Python’da “For” Döngüsü ile Tuple Kullanımı
Tıpkı listelerde olduğu gibi, tuple’ların üzerinde de for döngüsü ile gezinilebilir. Her iterasyonda tuple’ın bir elemanına erişebiliriz. Örneğin:
1 2 3 4 5 6 7 8 9 10 11 |
sebzeler = ("brokoli", "havuç", "fasulye") for sebze in sebzeler: print(sebze) """ Çıktı: brokoli havuç fasulye """ |
Ayrıca, enumerate()
metodunu kullanarak tıpkı listede olduğu gibi tuple’ın elemanlarına ve onların indekslerine de erişebiliriz:
1 2 3 4 5 6 7 8 9 10 11 12 |
sebzeler = ("brokoli", "havuç", "fasulye") for indeks, sebze in enumerate(sebzeler): print(f"Index {indeks}: {sebze}") """ Çıktı: Index 0: brokoli Index 1: havuç Index 2: fasulye """ |
Python’da Tuple Birleştirmek
Python’da iki ya da daha fazla tuple’ı birleştirmek oldukça kolaydır.
- İlk yöntem olarak “+” işaretini kullanabilirsiniz. “+” işareti, iki tuple’ı birleştirerek yeni bir tuple oluşturur. Ancak bu işlem, orijinal tuple’ları değiştirmez; bunun yerine yeni bir tuple döndürür. Örneğin:
1 2 3 4 |
tuple1 = (1, 2, 3) tuple2 = (4, 5, 6) birlesik_tuple = tuple1 + tuple2 print(birlesik_tuple) # Çıktı: (1, 2, 3, 4, 5, 6) |
- tuple() metodu ile birleştirme: Birkaç listenin ya da tuple’ın içeriğini tek bir tuple içerisinde birleştirmek için tuple() metodunu kullanabiliriz.
1 2 3 4 |
tuple1 = (1, 2, 3) tuple2 = (4, 5, 6) birlesik_tuple = tuple(list(tuple1) + list(tuple2)) print(birlesik_tuple) # Çıktı: (1, 2, 3, 4, 5, 6) |
Bu yöntem, tuple’ları önce listelere dönüştürür, sonra listeleri birleştirir ve son olarak birleştirilen listeyi tekrar tuple’a dönüştürür.
- Kullanarak birleştirme (Python 3.5+):
Python 3.5 ve sonrası sürümlerinde, *
operatörünü kullanarak birden fazla tuple’ı veya listenin içeriğini yeni bir tuple içerisinde birleştirebilirsiniz. Örneğin:
1 2 3 4 |
tuple1 = (1, 2, 3) tuple2 = (4, 5, 6) birlesik_tuple = (*tuple1, *tuple2) print(birlesik_tuple) # Çıktı: (1, 2, 3, 4, 5, 6) |
Python Tuple Metotları
- count(): Bu metot, tuple içinde belirtilen bir elemanın kaç kere geçtiğini döndürür.
- index(): Belirtilen elemanın tuple içindeki ilk indeksini döndürür. Eğer eleman tuple içinde bulunmazsa, ValueError hatası verir.
1 2 3 4 5 6 7 |
rakamlar = (1, 2, 3, 4, 5, 1, 2, 3) sayi = rakamlar.count(1) print(sayi) # çıktı: 2 meyveler = ("elma", "muz", "kiraz", "portakal", "karpuz") indeks = meyveler.index("kiraz") print(indeks) # çıktı: 2 |
Bu iki metot, tuple’ların üzerinde doğrudan çalıştırabileceğiniz tek built-in metodlardır. Tuple’ların değiştirilemez (immutable) olması sebebiyle, listelerde bulunan append(), insert(), remove() gibi metotlara tuple’da rastlamayız.