# # 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!
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://derslik.kerteriz.net/python-dersleri/temel-dersler/python-diziler/python-demetler.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
