Python'da listeler (list): metotlar, dilimleme, sıralama, append, demetler ve kümeler
Python'da liste (list), köşeli parantez içinde yazılan, sıralı ve değiştirilebilir bir koleksiyondur; örneğin [250, 1200, 99]. Elemanlar append ile eklenebilir, araya sokulabilir, silinebilir, dilimlerle alınabilir ve sıralanabilir. sort listeyi yerinde sıralayıp None döndürür; sorted ise yeni, sıralanmış bir liste verir.
Python'da liste (list), köşeli parantez içinde yazılan, sıralı ve değiştirilebilen bir değer koleksiyonudur: sonuna eleman eklenebilir, ortasına sokulabilir, silinebilir, sıralanabilir. Dildeki en yaygın koleksiyon budur: dosyanın satırları, bir aylık harcamalar, API yanıtları, neredeyse her şey bir liste olarak başlar. Python list'ini baştan sona ele alalım: oluşturma, metotlar, dilimleme, sıralama, liste üretimi, kopyalama ve sonunda demetler ile kümeler.
Python'da liste nedir
Liste, elemanları verdiğiniz sırayla tutar ve elemanlara sıfırdan başlayan indekslerle erişilir. Aynı listede farklı türde değerler de bulunabilir, ama pratikte genellikle benzer veriler tutulur.
amounts = [250, 1200, 99]
print(amounts[0]) # 250 — ilk eleman
print(amounts[-1]) # 99 — son eleman
amounts[1] = 1300 # liste değiştirilebilir
print(len(amounts)) # 3 — liste uzunluğu
Listenin boyutunu len() fonksiyonu verir. Olmayan bir indekse erişmek IndexError: list index out of range hatasına yol açar.
Liste oluşturmak
empty = [] # boş liste
also_empty = list() # aynısı list fonksiyonuyla
nums = [1, 2, 3]
chars = list("abc") # ['a', 'b', 'c']
digits = list(range(5)) # [0, 1, 2, 3, 4]
zeros = [0] * 4 # [0, 0, 0, 0]
list() fonksiyonu, dolaşılabilen her nesneyi listeye çevirir: bir metni, range aralığını, kümeyi, sözlüğün anahtarlarını.
append ve diğer liste metotları
append metodu listenin sonuna tek bir eleman ekler; Python'da en sık kullanılan metottur. Listeyi yerinde değiştirir ve None döndürür.
amounts = [250, 1200]
amounts.append(450) # [250, 1200, 450]
amounts.extend([10, 20]) # [250, 1200, 450, 10, 20]
amounts.insert(0, 5) # [5, 250, 1200, 450, 10, 20]
amounts.remove(1200) # ilk 1200 değerini sil
last = amounts.pop() # 20 — son elemanı sil ve döndür
Sık yapılan hata: a.append([10, 20]) tek bir eleman ekler; o eleman iç içe bir listedir, iki sayı değildir. Birden fazla eleman eklemek için extend kullanın.
| Metot | Ne yapar |
|---|---|
append(x) | x'i sona ekler |
extend(iter) | dizinin tüm elemanlarını ekler |
insert(i, x) | x'i i indeksinden önce ekler |
remove(x) | x'in ilk geçişini siler (yoksa ValueError) |
pop(i=-1) | indeksteki elemanı siler ve döndürür |
index(x) | ilk geçtiği indeks |
count(x) | x kaç kez geçiyor |
sort() | yerinde sıralar |
reverse() | yerinde ters çevirir |
copy() | yüzeysel kopya |
clear() | listeyi temizler |
Bir elemanı indeksle ya da bir aralığı del operatörüyle de silebilirsiniz: del a[0], del a[1:3]. Listelerle birlikte kullanılan yararlı yerleşik fonksiyonlar: len, sum, min, max, sorted, reversed, enumerate, zip.
Python'da dilimleme
Dilim, listenin bir parçasını a[başlangıç:bitiş:adım] biçiminde alır: başlangıç dahil, bitiş hariç, adım kadar ilerleyerek. Her kısım atlanabilir. Dilim her zaman yeni bir liste döndürür.
a = [0, 1, 2, 3, 4, 5]
print(a[1:4]) # [1, 2, 3]
print(a[:2]) # [0, 1] — ilk iki eleman
print(a[-2:]) # [4, 5] — son iki eleman
print(a[::2]) # [0, 2, 4] — her ikinci eleman
print(a[::-1]) # [5, 4, 3, 2, 1, 0] — ters çevrilmiş
print(a[:]) # tüm listenin kopyası
İndeksin aksine, liste sınırlarının dışındaki bir dilim hata vermez: a[10:20] sadece [] döndürür. Bir dilime değer atayarak listenin bir parçasını değiştirebilirsiniz: a[1:3] = ["x", "y", "z"].
String dilimleme
Dilimler, listeler ve demetlerle olduğu gibi stringlerde de aynı şekilde çalışır:
s = "Python 3.15"
print(s[:6]) # Python
print(s[-4:]) # 3.15
print(s[::-1]) # 51.3 nohtyP
Dilimle bir stringi değiştiremezsiniz; stringler değiştirilemezdir, dilim yeni bir string üretir.
Liste sıralama: sort ve sorted
Yeni başlayanların en çok karıştırdığı konu budur. sort metodu elemanları listenin kendisinde yeniden dizer ve None döndürür. sorted fonksiyonu ise orijinal listeye dokunmaz, sıralanmış yeni bir liste verir.
amounts = [250, 1200, 99]
amounts.append(450)
print(sorted(amounts)) # [99, 250, 450, 1200] — yeni kopya
print(amounts) # [250, 1200, 99, 450] — orijinal duruyor
result = amounts.sort() # yerinde sıralar
print(result, amounts) # None [99, 250, 450, 1200]
Buradan klasik "neden None çıktı" sorunu doğar: a = a.sort() listeyi None değeriyle üzerine yazar. Ya a.sort() yazın ya da a = sorted(a).
Anahtar ve ters sıra
İki yöntem de key ve reverse parametrelerini kabul eder. key, elemanların hangi değere göre karşılaştırılacağını belirleyen bir fonksiyondur.
words = ["kahve", "Taksi", "abonelik"]
print(sorted(words, key=len)) # ['kahve', 'Taksi', 'abonelik']
print(sorted(words, key=str.lower)) # büyük-küçük harf farkı olmadan
print(sorted([3, 1, 2], reverse=True)) # [3, 2, 1]
expenses = [("Yiyecek", 650), ("Sinema", 120), ("Taksi", 300)]
expenses.sort(key=lambda e: e[1]) # tutara göre
Python'daki sıralama kararlıdır: aynı anahtara sahip elemanlar özgün sıralarını korur. Fark ayrıca uygulanabilirlikte de ortaya çıkar: sorted her dizide (metin, sözlük, küme) çalışır; sort ise yalnızca listelerde vardır.
Listeyi ters çevirmek
Üç yol var, davranışları farklıdır:
a.reverse()— yerinde ters çevirir,Nonedöndürür;a[::-1]— ters çevrilmiş yeni bir liste verir;reversed(a)— tembel bir yineleyicidir, döngüde kullanışlıdır:for x in reversed(a):.
Liste üzerinde dolaşmak
items = ["kahve", "metro", "sinema"]
for item in items:
print(item)
for i, item in enumerate(items, start=1):
print(i, item) # 1 kahve, 2 metro, 3 sinema
print("sinema" in items) # True — eleman var mı kontrolü
Üzerinde döngü dönen listeden eleman silmeyin; bazı elemanlar atlanır. Yeni bir liste üretin ya da kopya a[:] üzerinde dolaşın.
Liste üretimi (list comprehension)
Liste üretimi, yeni bir listeyi tek satırda kurar: bir ifade, bir döngü ve isteğe bağlı bir koşul.
squares = [n * n for n in range(6)] # [0, 1, 4, 9, 16, 25]
big = [a for a in [250, 1200, 99] if a > 200] # [250, 1200]
names = [s.strip().title() for s in [" ayşe ", "ali"]]
Liste üretimleri genellikle append kullanan bir döngüden daha hızlı ve daha okunaklıdır. Ama mantık tek ve anlaşılır bir satıra sığmıyorsa, düzgün bir döngü daha iyidir.
Listeleri birleştirmek, toplamak ve çıkarmak
a = [1, 2, 3]
b = [3, 4]
print(a + b) # [1, 2, 3, 3, 4] — yeni liste
a += b # a.extend(b) ile aynı
print([*a, *b]) # açarak yeni listeye koymak
Listeleri - operatörüyle çıkaramazsınız. Bir listeden başka bir listenin elemanlarını çıkarmak için liste üretimi kullanın: [x for x in a if x not in set(b)]. İki listenin kesişimini kümeler üzerinden bulmak en kolayıdır: set(a) & set(b) (ancak sıra ve tekrarlar bu durumda kaybolur).
İç içe ve iki boyutlu listeler
Liste içinde liste, bir tabloyu ya da matrisi saklamanın basit yoludur:
matrix = [[1, 2, 3], [4, 5, 6]]
print(matrix[1][2]) # 6
grid = [[0] * 3 for _ in range(2)] # doğrusu
bad = [[0] * 3] * 2 # tuzak: aynı listeye iki referans
bad[0][0] = 9
print(bad) # [[9, 0, 0], [9, 0, 0]]
Liste açmak (unpacking)
first, second, third = [10, 20, 30]
head, *rest = [1, 2, 3, 4] # head=1, rest=[2, 3, 4]
print(*["a", "b"], sep=", ") # a, b — listeyi parantezsiz yazdırmak
Değişken sayısı listenin uzunluğuyla eşleşmezse ValueError alırsınız; yıldızlı değişken bu durumda işinizi görür.
Listeyi kopyalamak
b = a bir listeyi kopyalamaz, aynı nesneye ikinci bir ad verir: b üzerinden yapılan değişiklikler a'da da görünür. Bağımsız bir kopya için açıkça yazın: a.copy(), list(a) ya da a[:]. İç içe verilerde bu yeterli değildir; iç listeler yine ortak kalır, copy.deepcopy(a) gerekir.
import copy
a = [[1, 2], [3]]
b = a.copy()
b[0].append(99)
print(a) # [[1, 2, 99], [3]] — iç liste ortak
c = copy.deepcopy(a) # tamamen bağımsız kopya
Demetler: değiştirilemeyen liste
Demet (tuple) listeye benzer, ama oluşturulduktan sonra değiştirilemez. Bu, okuyana açık bir işarettir: karşınızda sabit alanları olan tek bir kayıt vardır, büyüyen bir koleksiyon değil. Demetler kolayca açılır; fonksiyonların birden fazla değer döndürmesi de genellikle demetle olur.
expense = (250, "Kahve")
amount, item = expense
expense[0] = 300
# TypeError: 'tuple' object does not support item assignment
Değiştirilemeyen değerlerden oluşan bir demet özetlenebilir (hashable), bu yüzden sözlüğe anahtar olarak konabilir. Tek elemanlı bir demet virgülle yazılır: (5,).
Kümeler: yalnızca benzersiz değerler
Küme (set) yalnızca benzersiz değerleri tutar ve sırayı hatırlamaz. Tekrarları temizlemenin ve "bu eleman var mı" diye sormanın en hızlı yoludur; ayrıca kesişim, birleşim ve fark işlemlerini de yapar.
jan = {"Yiyecek", "Taksi", "Sinema"}
feb = {"Yiyecek", "Abonelikler"}
print(jan & feb) # {'Yiyecek'}
print(feb - jan) # {'Abonelikler'}
unique = list(dict.fromkeys([3, 1, 3, 2])) # [3, 1, 2] — tekrarsız, sıra korunmuş
empty = set() # {} boş bir dict'tir!
Hangi koleksiyonu seçmeli
| Görev | Koleksiyon |
|---|---|
| Sıra ve değişiklik | list |
| Sabit kayıt | tuple |
| Anahtarla arama | dict |
| Benzersizlik, "var mı" kontrolü | set |
| Değiştirilemeyen ayarlar | frozendict (Python 3.15) |
x in list kontrolü elemanları sırayla gezer; x in set ise neredeyse anında çalışır. Bir döngüde büyük bir listede defalarca arama yapıyorsanız, listeyi kümeye çevirin.
Özet
Python listesi sıralı ve değiştirilebilir bir koleksiyondur: append ve extend ekler, pop ve remove siler, a[başlangıç:bitiş:adım] dilimleri alır, sort yerinde sıralayıp None döndürür, sorted ise yeni bir liste verir. Kopyayı açıkça oluşturun; sabit kayıtlar için demet, benzersiz değerler için küme kullanın. Listeler, demetler, sözlükler ve kümeler, "Python 3.15: sıfırdan uzmanlığa" kursunda uygulamalı olarak işlenir.
Sık sorulan sorular
Python'da liste ile dizi (array) arasındaki fark nedir?
Python'da diğer dillerdeki gibi yerleşik bir dizi yoktur; bunun yerini farklı türde değerler tutabilen liste alır. Sayısal ve sıkı tipli diziler için array modülü ya da NumPy kullanılır.
Listede bir elemanın indeksini nasıl bulurum?
a.index(x) metodu ilk geçtiği indeksi döndürür; eleman yoksa ValueError verir. Bu yüzden çağırmadan önce x in a ile kontrol edin.
Listeden tekrarları sırayı bozmadan nasıl silerim?
list(dict.fromkeys(a)) kullanın: sözlük anahtarları benzersiz tutar ve ekleme sırasını korur. list(set(a)) de tekrarları siler, ama sırayı korumaz.
Bir liste elemanlarını tek stringe nasıl birleştiririm?
String metodu join ile: ", ".join(["a", "b", "c"]) sonucu "a, b, c" olur. Tüm elemanlar string olmalıdır; sayıları önce map(str, a) ile çevirin.
Bir listede farklı türde elemanlar tutabilir miyim?
Evet; bir liste aynı anda sayı, string, başka listeler ve farklı nesneler içerebilir. Ancak key parametresi olmadan böyle bir listeyi sıralamak genellikle mümkün değildir: sayı ile stringin karşılaştırılması TypeError verir.
Bu konu “Python 3.15: от новичка до профи” kursunda uygulamalı olarak ayrıntılı işleniyor.
Kursa git