# # Python Listeler

Python koleksiyonlar (diziler) altında yer alan **liste (list)** veri tipimiz *sıralanabilen* , *değiştirilebilen* , *indekslenebilen* ve *çoğul elemana izin veren* bir veri tipidir. Köşeli parantezlerle `[ ]` oluşturulur.

```python
liste = []
```

Köşeli parantezlere oluşturulan listeler, en başta elemanlarla birlikte de oluşturulabilirler.

```python
liste = ["Ankara","İstanbul","Kayseri"]
```

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

```python
liste = list()

liste = list(("Ankara","İstanbul","Kayseri"))
```

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

```python
print(type(liste)) # <class 'list'>
```

## 1. Liste Elemanlarına Erişim

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

```python
liste = ["Sal","Vapur","Feribot","Korvet","Fırkateyn"]

print(liste[0])    # Sal
print(liste[1])    # Vapur
print(liste[2])    # Feribot
print(liste[3])    # Korvet
print(liste[4])    # Fırkateyn
```

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

## 2. Negatif İndeksleme

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

```python
liste = ["Sal","Vapur","Feribot","Korvet","Fırkateyn"]

print(liste[-1])    # Fırkateyn
print(liste[-2])    # Korvet
print(liste[-3])    # Feribot
print(liste[-4])    # Vapur
print(liste[-5])    # Sal
```

{% hint style="warning" %}
Negatif indeks normal indeksin aksine **-1** den başlar. Yani bir listede son elemanın indeksi -1 dir.
{% endhint %}

## 3. Bir Listeden Yeni Liste Oluşturma (İndeks)

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

```python
liste = ["a","b","c","d","e","f","g"]

yeniliste = liste[2:5]

print(yeniliste)    #["c","d","e"]
```

{% hint style="info" %}
Bu şekilde yeni liste 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 Listeden Yeni Liste Oluşturma (Negatif İndeks)

Elimizdeki listeden yeni bir liste oluştururken negatif indeksleri de kullanabiliriz.

```python
liste = ["a","b","c","d","e","f","g"]

yeniliste = liste[-3:-1]

print(yeniliste)    #["e","f"]
```

{% hint style="info" %}
Bu şekilde yeni liste 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. Liste Elemanlarını Sıralayarak Ekrana Yazdırma

Yeri geldiğinde liste 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
liste = ["a","b","c","d"]

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

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

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

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

```python
liste = ["a","b","c","d"]

print(len(liste))    #4
```

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

```python
liste = ["a","b","c","c","d","c"]

sayac = liste.count("c")

print(sayac)    #3
```

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

Listeler ile çalışırken listede mevcut olan bir elemanın değerini rahatlıkla değiştirebilirsiniz. Bunun için elemanın indeks değerini bilmeniz yeterlidir.

```python
meyveler = ["kivi","çilek","muz","pırasa"]

meyveler[3] = "armut"

print(meyveler)    # ["kivi","çilek","muz","armut"]
```

## 8. Listeye Yeni Eleman Ekleme

Listeler ile çalışırken listenin sonuna rahatlıkla yeni bir eleman ekleyebilirsiniz. Bunun için **append()** fonksiyonunu kullanacağız.

```python
meyveler = ["kivi","çilek"]

meyveler.append("muz")

print(meyveler)    # ["kivi","çilek","muz"]
```

Eğer listenin sonuna değilde belirlediğiniz indeks numarasına eleman eklemek istiyorsanız **insert()** fonksiyonunu kullanmalısınız.

```python
meyveler = ["kivi","çilek"]

meyveler.insert(1,"muz")

print(meyveler)    # ["kivi","muz","çilek"]
```

## 9. Listeden Bir Eleman Çıkarma

Listenizden bir eleman çıkarmak istiyorsanız bunun dört yöntemi vardır. İlki listenin en sonundaki elemanı listeden atmaktır ve bunun için **pop()** fonksiyonunu kullanmalısınız.

```python
meyveler = ["kivi","çilek","muz","armut"]

meyveler.pop()

print(meyveler)    # ["kivi","çilek","muz"]
```

İkinci yöntem çıkarmak istediğiniz elemanı belirterek **remove()** fonksiyonunu kullanmaktır.

```python
meyveler = ["kivi","çilek","muz","armut"]

meyveler.remove("çilek")

print(meyveler) # ["kivi","muz","armut"]
```

Üçüncü yöntem çıkarmak istediğiniz elemanın indeksini belirterek **del** terimini kullanmaktır.

```python
meyveler = ["kivi","çilek","muz","armut"]

del meyveler[0]

print(meyveler) # ["çilek","muz","armut"]
```

Son ve en sert yöntemde tüm listeyi temizlemektir. Listedeki tüm elemanları çıkarıp boş bir liste elde etmek için **clear()** fonksiyonunu kullanabilirsiniz.

```python
meyveler = ["kivi","çilek","muz","armut"]

meyveler.clear()

print(meyveler) # []
```

## 10. Liste Kopyalamak ve Çoğaltmak

Elimizde olan bir listeyi kopyalayarak çoğaltmak istiyorsak **copy()** fonksiyonunu kullanabiliriz.

```python
liste = ["a","b","c","d"]

yeniliste = liste.copy()

print(yeniliste) # ["a","b","c","d"]
```

Liste kopyalama için kullanılan diğer bir yöntem de yeni bir liste oluşturulurken kopyalanacak listeyi belirtmektir.

```python
liste = ["a","b","c","d"]

yeniliste = list(liste)

print(yeniliste) # ["a","b","c","d"]
```

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

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

```python
liste1 = ["A","B","C"] liste2 = ["D","E"]

liste3 = liste1 + liste2

print(liste3) # ["A","B","C","D","E"]
```

Şimdi ise sırf bu liste birleştirme işlemi için oluşturulmuş **extend()** fonksiyonunu kullanalım.

```python
liste1 = ["A","B","C"] liste2 = ["D","E"]

liste1.extend(liste2)

print(liste1) # ["A","B","C","D","E"]
```

Kolay yöntemleri öğrendikten sonra şimdi de biraz daha uzun yöntemini görelim.

```python
liste1 = ["A","B","C"] liste2 = ["D","E"]

for x in liste2: liste1.append(x)

print(liste1) # ["A","B","C","D","E"]
```

## 12. Liste Elemanlarını Sıralamak

Liste elemanlarınızı küçükten büyüğe veya büyükten küçüğe sıralamak istediğiniz zaman **sort()** fonksiyonunu kullanabilirsiniz.

```python
liste = [14,36,2,95,43,0,66]

liste.sort()

print(liste) # [0, 2, 14, 36, 43, 66, 95]
```

Tam tersi yani büyükten küçüğe sıralamak için **reverse=True** terimini kullanmalısınız.

```python
liste = [14,36,2,95,43,0,66]

liste.sort(reverse=True)

print(liste) # [95, 66, 43, 36, 14, 2, 0]
```

## 13. Bir Elemanın İndeksini Bulmak

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

```python
liste = [14,36,2,95,43,0,66]

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

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

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

```python
liste = ["A","B","C","D","E"]

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