Python öğrenmeye başlamak, çoğu zaman kafa karıştırıcı olabiliyor. Bunun başlıca nedenleri arasında yetersiz açıklamalara sahip belgeler ve eksik eğitim materyalleri yer alıyor. Eğer bu zorlukları yaşıyorsanız yalnız değilsiniz. Bu rehberde yer alan Python liste komutlarını inceleyerek siz de Python’da sağlam bir temel atabilirsiniz.
Listeler, bellekte sıralı olarak yer alan verilerden oluşur. Alışveriş listesi gibi düşünülebilir. Bu yapı sayesinde veriler üzerinde çeşitli işlemler yapılabilir. Örneğin bir listeye öge eklemek için my_shopping_list.append("süt") komutu kullanılabilir. Listelerle çalışırken faydalı olacak birçok metot bulunur. Bu rehberde en çok kullanılanları ele alacağız.
Liste Oluşturma ve Ögelere Erişim
Liste oluşturma ve ögelere erişim, programlamanın temel konularından biri. Bu bölümde, listelerin nasıl tanımlandığı ve içerdikleri verilere nasıl ulaşıldığına dair temel bilgileri sizlerle paylaşıyoruz.
Liste Oluşturma
Liste oluşturmak oldukça basit. Bir değişkene köşeli parantez kullanarak atama yapabilirsiniz:
my_shopping_list = []
Listeleri önceden tanımlanmış ögelerle de başlatabilirsiniz:
my_shopping_list = ["süt", "ekmek", "şeker"]
Listelere farklı türlerde veriler ve hatta başka listeler ekleyebilirsiniz:
my_shopping_list = ["süt", 1, [1, 2, 3], True]
Doğrudan Atamalar
Mevcut bir listede ögeler varsa bunları doğrudan değiştirebilirsiniz:
my_shopping_list = ["süt", "ekmek", "şeker"]
my_shopping_list[0] = "kahve"
print(my_shopping_list)
my_shopping_list[2] = "muz"
print(my_shopping_list)

Köşeli parantez içindeki sayılar, liste ögelerinin indeksini belirtir. Yani ilk öge 0, ikinci ise 1 şeklinde numaralandırılır.
Liste Ögelerine Erişim
Listede yer alan ögelere indeks numaralarını kullanarak ulaşabilirsiniz:
my_shopping_list = ["süt", "ekmek", "şeker"]
print(my_shopping_list[0])
print(my_shopping_list[1])

Ayrıca Python, listenin sonundan başlayarak negatif indekslerle de erişim sağlayabiliyor:
my_shopping_list = ["süt", "ekmek", "şeker"]
print(my_shopping_list[-1])
print(my_shopping_list[-2])

💡İpucu: Son öge -1, sondan bir önceki öge ise -2 ile çağrılır.
Bir Liste Üzerinde Döngü Kurma
Döngüler, listedeki her öge üzerinde işlem yapmayı sağlar. Aşağıda bir for döngüsü ile listedeki ögelerin nasıl gezileceğini görebilirsiniz:
my_shopping_list = ["süt", "ekmek", "şeker"]
for item in my_shopping_list:
print(item)
my_shopping_list içindeki her öge için döngü, onu item değişkenine atıyor. Nasıl çalıştığını göstermek için o değişkeni yazdırabiliriz:

Her öge üzerinde herhangi bir eylemi gerçekleştirebilirsiniz. Örneğin ögeye bir ünlem işareti ekleyebilir ve sonra onu yazdırabilirsiniz:
my_shopping_list = ["süt", "ekmek", "şeker"]
for item in my_shopping_list:
print(item + "!") # Ünlem işareti.

Bir Listenin Bölümlerini Alma (Dilimleme)
Bir listenin belirli bölümlerine ulaşmak için dilimleme yöntemi kullanılır. Bu işlem, listenin kendisini değiştirmez ve yalnızca istenilen ögeleri içeren yeni bir liste üretir.
💡İlk iki ögeyi almak isterseniz şu kodu kullanabilirsiniz:
my_shopping_list = ["süt", "ekmek", "şeker"]
print(my_shopping_list[0:2])

Burada köşeli parantez içinde kullanılan 0:2 ifadesi, ilk ögeden başlayarak ikinci indekse kadar olan ögeleri seçer. Ancak ikinci indeks dahil edilmez.
💡İpucu: İlk iki öge 0 ve 1 numaralı indekslerde yer alır.
İki nokta üst üste işaretinden sonra veya önce bir sayı belirtmezseniz listenin geri kalanı döndürülür. Örneğin aşağıdaki kod, ikinci ögeyi ve listenin geri kalanını döndürür:
my_shopping_list = ["süt", "ekmek", "şeker"]
print(my_shopping_list[1:])

Yukarıdaki örnek, ikinci ögeden başlayarak listenin sonuna kadar olan tüm ögeleri döndürür.
my_shopping_list = ["süt", "ekmek", "şeker"]
print(my_shopping_list[:2])

Bu kod ise listenin başından başlayarak ikinci indekse kadar olan ögeleri içerir. Ancak yine ikinci indeks dahil edilmez.
Ters Yönde Dilimleme
Negatif indeksler kullanarak dilimlemeyi ters sırada gerçekleştirebilirsiniz. Python, negatif indeksleri listenin sonuna göre işler. Örneğin -1 son öge, -2 sondan ikinci öge anlamına gelir.
Aşağıdaki örnek, sondan ikinci ögeden başlayarak listenin sonuna kadar olan kısmı döndürür.
my_shopping_list = ["süt", "ekmek", "şeker"]
print(my_shopping_list[-2:])

💡İpucu: Negatif indeksler, -1‘den başlar; bu nedenle sıfırdan farklı olarak geriye doğru sayılır.
Liste Değişikliği: Öge Ekleme, Kaldırma ve Sıralama
Bir listeye yeni öge eklemek, öge çıkarmak ya da sıralama yapmak için Python’daki hazır metotlar, en pratik çözümleri sunar. Öge ekleme, çıkarma ya da sıralama işlemleri şu şekilde yapılabilir:
append()
Append, bir listenin sonuna eklemek anlamına gelir.
my_shopping_list = ["süt", "ekmek", "şeker"]
my_shopping_list.append("muz")
print(my_shopping_list)
my_shopping_list.append("peynir")
print(my_shopping_list)

insert()
Insert de append gibi; ancak ögeleri belirli bir indekse ekler.
my_shopping_list = ["süt", "ekmek", "şeker"]
# 1
my_shopping_list.insert(0, "muz")
print(my_shopping_list)
# 2
my_shopping_list.insert(2, "peynir")
print(my_shopping_list)
İlk örnekte “muz”, listenin başına eklenir. İkincisinde “peynir”, üçüncü sıraya yerleştirilir.

💡İpucu: insert metodunu dikkatli kullanmalısınız. Büyük listeler için (örneğin milyonlarca verisi olan) performansı etkileyebilir.
remove()
Listeden belirli bir ögeyi kaldırır. Eğer aynı öge birden fazla kez varsa yalnızca ilk karşılaşılan silinir.
my_shopping_list = ["süt", "ekmek", "şeker"]
# 1
my_shopping_list.remove("süt")
print(my_shopping_list)
# 2
my_shopping_list.remove("şeker")
print(my_shopping_list)

Sıralama (Sorting)
Python’da bir listeyi sıralamak için iki seçeneğiniz bulunur:
- Yerinde (In-place): Orijinal listeyi değiştirir.
- Yerinde Olmayan (Out-of-place): Yeni bir liste döndürür ve orijinal listeyi değiştirmez.
Sort metodu, listeyi doğrudan sıralar ve orijinal listeyi değiştirir.
my_shopping_list = ["süt", "ekmek", "şeker"]
my_shopping_list.sort()
print(my_shopping_list)
Bu metot ile listenin sıralı hâli doğrudan yazdırılabilir. Çünkü sort() işlemi listeyi günceller.

Sorted işlevi, orijinal listeyi değiştirmeden ögeleri sıralanmış yeni bir liste olarak döndürüyor.
my_shopping_list = ["süt", "ekmek", "şeker"]
my_sorted_list = sorted(my_shopping_list)
print(my_shopping_list) # 1
print(my_sorted_list) # 2

sorted() ile oluşturulan yeni listelerde orijinal veri üzerinde bir değişiklik yapılmadığını fark edebilirsiniz.
Liste Bilgilerini Kullanma
Akıllı kararlar almak için liste bilgilerini şu şekilde kullanabilirsiniz:
Liste Uzunluğunu Kontrol Etme
En yaygın liste işlemi olan len fonksiyonunu kullanarak listenin uzunluğunu kontrol edebilirsiniz.
my_shopping_list = ["süt", "ekmek", "şeker"]
if len(my_shopping_list) > 0:
print("Liste boş değil.")

Burada listenin uzunluğu sıfırdan büyük olduğu sürece içerisinde içerik bulunduğu anlaşılır.
Koşullu Olarak Liste Kullanımı
Listeler doğrudan koşullu ifadelerde de kullanılabilir. Boş listeler “yanlış” (false), en az bir öge içeren listeler ise “doğru” (true) kabul edilir.
if []:
print("An empty list is truthy.") # It's not.
if ["foo"]:
print("A populated list is truthy.")

Bu yöntem, listenin dolu olup olmadığını pratik şekilde anlamayı sağlar.
Listeleri Karşılaştırma
Listeler karşılaştırılırken iki temel konuya dikkat edilir:
- Eşitlik: İki liste aynı ögeleri içeriyor mu?
- Kimlik: İki liste bellekte aynı nesne mi?
Eşitlik için == operatörü kullanılır. Bu operatör, ögelerin sırayla ve aynı şekilde eşleşip eşleşmediğine bakar.
one = [1]
two = [2]
also_one = [1]
if one == two:
print("Farklı listeler eşit.") # Bu satır çalışmaz.
if one == one:
print("Bir liste kendisiyle eşleşir.")
if one == also_one:
print("Aynı ögelere sahip farklı listeler eşleşir.")
Kimlik kontrolü yapılmak istendiğinde is operatörü devreye girer. Bu operatör, iki listenin bellekte aynı yeri işaret edip etmediğini kontrol eder.

one = []
two = []
if one is two:
print("Farklı listeler aynı nesne.") # Bu satır çalışmaz.
if one is one:
print("Bir liste kendi kimliğini taşır.")

Liste Üyeliği Kontrolü
Bir listenin bir şeyi içerip içermediğini görmek isteyebilirsiniz. Bu işlemi gerçekleştirmek için in operatörünü kullanabilirsiniz.
my_shopping_list = ["süt", "ekmek", "şeker"]
if "süt" in my_shopping_list:
print("Süt var!")
if "kurabiye" in my_shopping_list:
print("Kurabiye var!") # Bu satır çalışmaz.

Listeleri Dönüştürme: Ögeleri Başka Bir Şeye Çevirme
Python listelerini dönüştürme işlemi, programlamada sıkça karşılaşılan bir ihtiyaç. Bu süreçte listenin ögeleri, farklı veri türlerine veya yapılarına çevrilebilir.
Ögeleri Değiştirmek için map() Metodunu Kullanma
Bir listedeki tüm ögeleri dönüştürmek gerektiğinde map() fonksiyonu kullanılır. Bu yöntem, her öge için bir dönüşüm işlevi çalıştırır.
my_shopping_list = ["süt", "ekmek", "şeker"]
def apply_uppercase(item):
return item.upper()
map_object = map(apply_uppercase, my_shopping_list)
mapped_list = list(map_object) # Tekrar bir listeye dönüştür.
print(mapped_list)
Bu örnekte tüm alışveriş listesi büyük harfe çevrilmiş olur.

Ögeleri Kaldırmak için filter() Kullanma
filter() fonksiyonu, liste ögelerini belirli bir koşula göre tutar ya da atar. Fonksiyon True döndürdüğünde öge listede kalır, False döndürdüğünde çıkarılır.
my_shopping_list = ["süt", "ekmek", "şeker"]
def sekersiz_mi(item):
# Şeker olmayan her şeyi tut.
return item != "şeker" # True: Tut; False: At.
filter_object = filter(sekersiz_mi, my_shopping_list)
mapped_list = list(filter_object) # Tekrar bir listeye dönüştür.
print(mapped_list)

Bu kullanım sayesinde listeleri kolayca sadeleştirilebilir ya da ihtiyaçlara göre şekillendirilebilirsiniz.
Bonus İpuçları
Python’da daha verimli ve etkili kod yazmak isteyenler için ek ipuçları ve faydalı bilgileri bu bölümde paylaşıyoruz.
Liste Çağrışımları (List Comprehensions)
Liste çağrışımları, bir listeyi kısa ve okunabilir şekilde oluşturmanın etkili bir yolu. map() fonksiyonuna benzer şekilde, her öge üzerinde işlem yapılarak yeni bir liste üretilir.
my_shopping_list = ["süt", "ekmek", "şeker"]
# Listenin birebir kopyasını oluşturur
copied_list = [item for item in my_shopping_list]
print(copied_list)
# Her ögeyi büyük harfe çevirerek yeni bir liste üretir
changed_list = [item.upper() for item in my_shopping_list]
print(changed_list)

Yukarıdaki ikinci örnek için şu klasik for döngüsünün sadeleştirilmiş hâli denebilir:
my_shopping_list = ["süt", "ekmek", "şeker"]
# İşlevsel olarak #2 ile aynı.
changed_list = []
for item in my_shopping_list:
changed_list.append(item.upper())
print(changed_list)

Programlamada üç temel öge bulunuyor:
- Token 3 (Döngü Yapılan Liste): Bu kısım, üzerinde yineleme (döngü) gerçekleştirdiğiniz listeyi ifade ediyor.
- Token 1 (Üzerinde İşlem Yapılan Değişken): Altı çizili ve diğer altı çizili simgeyle ilişkilendirilen bu kısım, üzerinde işlem yaptığınız; yani değerini değiştirdiğiniz değişken.
- Token 2 (Değişken Bildirimi): Bu bölüm, simgeye bir ad atadığınız yer. Örneğin “item” kelimesi, burada bir değişken adı olarak kullanılmış.
Listeleri Açma (Unpacking)
Bir listedeki ögeleri değişkenlere atamak için kullanılan geleneksel yöntem, her bir ögeye indeks numarasıyla erişmeyi gerektiriyor. Bu yaklaşım, belirli bir ögeyi hedeflemek için konum bilgisini kullanma üzerine kurulu:
my_shopping_list = ["süt", "ekmek", "şeker"]
süt = my_shopping_list[0]
ekmek = my_shopping_list[1]
şeker = my_shopping_list[2]
Bunun yerine her ögeyi değişkenlere ayırmak için temiz bir yöntem olan liste açmayı tercih edebilirsiniz:
my_shopping_list = ["süt", "ekmek", "şeker"]
süt, ekmek, şeker = my_shopping_list
print(süt, ekmek, şeker)

Listedeki öge sayısının atanan değişken sayısıyla eşleşmesi gerekir. Aksi durumda hata alabilirsiniz. Eğer öge sayısı bilinmiyorsa veya bir kısmı gruplanmak isteniyorsa yıldız (*) operatörüyle kalan ögeleri tek bir değişkende toplayabilirsiniz:
my_shopping_list = ["süt", "ekmek", "tereyağı", "muz", "şeker"]
süt, ekmek, *ceşitli, şeker = my_shopping_list
print(süt, ekmek, ceşitli, şeker)

Bu yöntemle listenin ortasındaki ögeleri ceşitli adındaki listeye aktarabilirsiniz.
Derin Kopyalama (Deep Copy)
Listeler gibi karmaşık yapılarla çalışırken kopyalama işlemleri bazen beklenmedik sonuçlar yaratabilir. Örneğin bir listeyi başka listelere dahil ettiğinizde, tüm listeler aynı alt listeye referans verir. Bu da bir yerde yapılan değişikliğin diğerlerinde de görünmesine yol açabilir.
⚠️Aşağıdaki örneği inceleyecek olursak:
# Bunu ve sadece bu listeyi değiştireceğiz.
sut_ve_ekmek = ["süt", "ekmek"]
# Her iki alışveriş listesine süt ve ekmek ekleyin.
liste_a = ["liste_a", sut_ve_ekmek]
liste_b = ["liste_b", sut_ve_ekmek]
# Orijinal.
print("DEĞİŞİKLİK ÖNCESİ")
print(liste_a)
print(liste_b)
# Şimdi "süt"ü "elma" olarak değiştirin.
# liste_a veya liste_b'yi değiştirmediğimizi unutmayın.
sut_ve_ekmek[0] = "elma"
# Her ikisi de değişti.
print("\nDEĞİŞİKLİK SONRASI")
print(liste_a)
print(liste_b)

Yukarıdaki örnekte yalnızca sut_ve_ekmek üzerinde değişiklik yapılıyor ancak bu değişiklik, hem liste_a hem de liste_b içine yansıyor. Çünkü bu yapılar aynı nesneyi işaret ediyor.
Bu durumu önlemek için deepcopy() fonksiyonu kullanılabilir:
from copy import deepcopy
sut_ve_ekmek = ["süt", "ekmek"]
# Her iki alışveriş listesine süt ve ekmek ekleyin,
# ancak tüm listeye derin kopyalama uyguladığımı unutmayın.
liste_a = deepcopy(["liste_a", sut_ve_ekmek])
liste_b = deepcopy(["liste_b", sut_ve_ekmek])
# Orijinal.
print("DEĞİŞİKLİK ÖNCESİ")
print(liste_a)
print(liste_b)
# Şimdi sütü elmaya değiştirin.
# Bu hiçbir şey yapmayacak, çünkü liste_a ve liste_b'de kopyalar var.
sut_ve_ekmek[0] = "elma"
# Hiçbiri değişmedi.
print("\nDEĞİŞİKLİK SONRASI")
print(liste_a)
print(liste_b)

deepcopy(), yapının tamamını baştan kopyalayarak her listeyi birbirinden bağımsız hâle getirir. Bu sayede yapılan değişiklikler diğer listeleri etkilemez.
Bu rehberde listelerin nasıl oluşturulup erişileceğinden, döngülerin ve dilimlemenin kullanımına kadar birçok konuya değindik. Siz de paylaşılan bilgileri kullanarak Python programlama yeteneklerinizi geliştirebilirsiniz.
Kaynak: www.howtogeek.com