# # Python Demetler

Python koleksiyonlar (diziler) altında yer alan **demet (tuple)** veri tipimiz *sıralanabilen* , *indekslenebilen, çoğul elemana izin veren* ama değiştirilemeyen bir veri tipidir. Yuvarlak parantezlerle `( )` oluşturulur.

```python
demet = ()
```

Parantezlere oluşturulan demetler, en başta elemanlarla birlikte de oluşturulabilirler.

```python
demet = ("elma","armut","çilek")
```

Aynı zamanda bir liste **tuple()** fonksiyonu ile de oluşturulabilir ve constructor yöntemiyle başlangıçta elemanları ayarlanabilir.

```python
demet = tuple()

demet = tuple(("Ankara","İstanbul","Kayseri"))
```

{% hint style="warning" %}
Eğer tek elemanlı bir demet oluşturmak istiyorsanız ilk elemandan sonra **, (virgül)** işareti koymalısınız. Aksi takdirde veri tipiniz str olur.
{% endhint %}

{% tabs %}
{% tab title="Tuple" %}

```python
demet = ('a',)

print(type(demet))    # <class 'tuple'>
```

{% endtab %}

{% tab title="String" %}

```python
demet = ('a')

print(type(demet))    # <class 'str'>
```

{% endtab %}
{% endtabs %}

Oluşturduğumuz `demet` değişkenlerinin tipini kontrol edelim.

```python
print(type(demet))    # <class 'tuple'>
```

## 1. Demet Elemanlarına Erişim

Python programlama dilinde elinizdeki bir demetin elemanlarına ulaşabilmek için indeksleri kullanmalısınız. Aşağıdaki örnekle indeksleri nasıl kullanacağınızı gösterelim.

```python
demet = ("Ceviz","Fındık","Fıstık","Leblebi")

print(demet[0]) # Ceviz 
print(demet[1]) # Fındık 
print(demet[2]) # Fıstık 
print(demet[3]) # Leblebi
```

{% hint style="warning" %}
İndeks her zaman **0** dan başlar. Yani bir demette ilk elemanın indeksi 0 dır.
{% endhint %}

## 2. Negatif İndeksleme

Negatif indeks kullanarak bir demeti tersten başlayarak ele alabilirsiniz. Örnek üzerinde görelim hemen.

```python
demet = ("Ceviz","Fındık","Fıstık","Leblebi")

print(demet[-1]) # Leblebi 
print(demet[-2]) # Fıstık 
print(demet[-3]) # Fındık 
print(demet[-4]) # Ceviz
```

## 3. Bir Demetten Yeni Demet Oluşturma (İndeks)

Elimizde mevcut olan bir demetten indeks belirterek yeni bir demet oluşturabiliriz. Örneğin mevcut demetin 2.indeksinden 5.indeksine kadar ( *5 dahil değil* ) olan elemanlarla yeni bir demet oluşturalım.

```python
demet = ("a","b","c","d","e","f","g")

yenidemet = demet[2:5]

print(yenidemet) #("c","d","e")
```

{% hint style="info" %}
Bu şekilde yeni demet oluştururken `[x:y]` ifadesinde x dahil, y dahil değildir. Ayrıca indeksin **0** dan başladığını unutmayınız!
{% endhint %}

## 4. Bir Demetten Yeni Demet Oluşturma (Negatif İndeks)

Elimizdeki demetten yeni bir demet oluştururken negatif indeksleri de kullanabiliriz.

```python
demet = ("a","b","c","d","e","f","g")

yenidemet = demet[-3:-1]

print(yenidemet) #("e","f")
```

{% hint style="info" %}
Bu şekilde yeni demet oluştururken `[-x:-y]` ifadesinde -x dahil, -y dahil değildir. Ayrıca negatif indeksin **-1** den başladığını unutmayınız!
{% endhint %}

## 5. Demet Elemanlarını Sıralayarak Ekrana Yazdırma

Yeri geldiğinde demet elemanlarınızı ekrana sırasıyla yazdırmak, elemanlar üzerinde sırasıyla işlem yapmak isteyebilirsiniz. Bunun için **for** döngümüzü kullanacağız.

```python
demet = ("a","b","c","d")

for x in demet: print(x)
```

Bu şekilde demetin tüm elemanları x değeri üzerinden otomatik olarak listelenecek ve dizi elemanı bittiğinde döngü duracaktır.

## 6. Demet Eleman Sayısını Öğrenme

Elinizde olan bir demetin eleman sayısını öğrenmek için **len()** fonksiyonunu kullanacağız.

```python
demet = ("a","b","c","d")

print(len(demet)) #4
```

Eğer özellikle bir elemanın destede kaç adet bulunduğunu öğrenmek isterseniz de **count()** fonksiyonunu kullanmanız gerekiyor.

```python
demet = ("a","b","c","c","d","c")

sayac = demet.count("c")

print(sayac) #3
```

## 7. Demet Elemanının Değerini Değiştirme

Bu başlığı görünce şaşırmış olabilirsiniz çünkü konunun en başında demet elemanlarının **değiştirilemeyeceğini** söylemiştik. Bir demet oluşturduğunuzda elemanlarına artık indekslerle ulaşarak **değiştiremezsiniz** .

```python
meyveler = ("kivi","çilek","muz","karpuz")

meyveler[3] = "armut" # !!! HATA VAR !!!
```

Gördüğünüz gibi demetin bir elemanını değiştirmeye çalıştığınızda hata alacaksınızdır. Fakat elinizdeki demetin bir elemanını gerçekten değiştirmeye ihtiyaç duyduğunuzda aşağıdaki gibi dolaylı bir yöntem izleyebilirsiniz.

```python
x = ("kivi","çilek","muz","karpuz") 
y = list(x)

y[1] = "avakado" 
x = tuple(y)

print(x) # ("kivi","çilek","muz","karpuz")
```

Örnekteki gibi elimizde olan bir demeti önce listeye çevirerek elemanlarını indekslerle değiştirebilir hale getirdik. Ardından değiştirme işlemini yaptıktan sonra listemizi tekrar demete çeviriyoruz ve dolaylı yoldan demetimizi düzenlemiş oluyoruz.

## 8. Demete Yeni Eleman Ekleme

Bir demete yeni bir eleman **ekleyemezsiniz.** Bunun yerine yukarıdaki örnekte olduğu gibi önce listeye çevirip ekleme işlemini yaptıktan sonra tekrar demete çevirebilirsiniz.

## 9. Listeden Bir Eleman Çıkarma

Bir demetten eleman **çıkaramazsınız.** Bunun yerine yukarıdaki örnekte olduğu gibi önce listeye çevirip çıkarma işlemini yaptıktan sonra tekrar demete çevirebilirsiniz.

## 10.  **Demet** Kopyalamak ve Çoğaltmak

Elimizde olan bir demeti kopyalayarak çoğaltmak için kopyalanacak demeti belirterek yeni bir demet oluşturabiliriz.

```python
demet = ("a","b","c","d")

yenidemet = tuple(demet)

print(yenidemet) # ("a","b","c","d")
```

## 11. İki Farklı Demeti Birleştirmek

Birbirinden farklı veya aynı iki demeti birleştirmek için **+** operatörünü kullanabiliriz.

```python
demet1 = ("A","B","C") 
demet2 = ("D","E")

demet3 = demet1 + demet2

print(demet3) # ("A","B","C","D","E")
```

## 12. Bir Elemanın İndeksini Bulmak

Elimizdeki demetin bir elemanının demetteki indeksini bulmak için **index()** fonksiyonunu kullanabilirsiniz.

```python
demet = (14,36,2,95,43,0,66)

print(demet.index(95)) # 3
```

## 13. Bir Elemanın Varlığını Kontrol Etme

Demette bir elemanın var olup olmadığını kontrol etmek için **in** terimini kullanabiliriz.

```python
demet = ("A","B","C","D","E")

if "C" in demet: 
    print("Evet var!") 
else: 
    print("Hayır yok!")
    
# Evet var!
```
