Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Python Dilimleme Nasıl Kullanılır? Liste ve Metinden Parça Alma

python-dilimleme-nasil-kullanilir-liste-ve-metinden-parca-alma
Bu yazıda neler var?
  1. Dilimlemeyi Anlamanın En Kolay Yolu: Üç Soru
  2. Temel Sözdizimi ve Basit Bir Örnek
  3. Negatif İndekslerle Sondan Sayma
  4. Negatif Step ile Ters Sıralama
  5. Kısa Kod Tablosu: Dilimleme İfadeleri ve Çıktıları
  6. Metinlerde Dilimleme: Aynı Mantık, Farklı Veri Türü
  7. Dilimleme Yeni Bir Nesne Oluşturur
  8. Sık Sorulan Sorular

Python'da dilimleme (slicing), bir liste veya metin gibi sıralı bir veriden belirli bir parçayı tek satırlık bir ifadeyle almanızı sağlayan bir tekniktir. dizi[başlangıç:bitiş:adım] söz dizimini kullanarak hem baştan hem sondan seçim yapabilir, isterseniz veriyi ters çevirebilirsiniz. Bu makalede dilimlemenin mantığını, temel sözdizimini ve negatif indekslerle sondan sayma yöntemini örneklerle göreceksiniz.

Dilimlemeyi Anlamanın En Kolay Yolu: Üç Soru

Dilimleme ilk bakışta kafa karıştırıcı görünebilir ama işin özünde sadece üç soruya cevap vermeniz gerekir: nereden başlayacağım, nerede duracağım ve hangi aralıklarla ilerleyeceğim. Python'da her dilimleme ifadesi bu üç bilgiyi [start:stop:step] şeklinde yan yana dizer.

start sorusu, dilimin hangi indeksten başlayacağını belirler. stop sorusu, dilimin hangi indekste duracağını söyler; ancak burada önemli bir ayrıntı var: stop indeksindeki eleman dilime dahil edilmez, dilim ondan bir önceki elemanla sona erer. step sorusu ise atlama adımını belirtir; varsayılan değeri 1'dir, yani her elemanı sırayla alırsınız. Step değeri 2 olursa bir eleman atlayarak ilerlersiniz, negatif olursa da ters yönde hareket edersiniz.

Bu üç soruyu aklınızda tutarsanız, karşınıza çıkan herhangi bir dilimleme ifadesini okurken şu şekilde düşünebilirsiniz: "Nereden başlıyor, nerede duruyor, kaçar kaçar ilerliyor?" Bu basit çerçeve, sonraki bölümlerdeki örnekleri çok daha kolay takip etmenizi sağlayacak.

Temel Sözdizimi ve Basit Bir Örnek

Dilimlemenin genel sözdizimi şu şekildedir:

sequence[start:stop:step]

Burada sequence bir liste, tuple veya string olabilir. start, stop ve step parametrelerinin üçü de isteğe bağlıdır; boş bırakıldıklarında Python varsayılan değerleri kullanır (start için 0, stop için dizinin sonu, step için 1).

Basit bir örnek üzerinden gidelim. Alışveriş notlarınızı tutan bir liste düşünün:

notlar = ["ekmek", "süt", "yumurta", "peynir", "domates"]

print(notlar[1:4])
# Çıktı: ['süt', 'yumurta', 'peynir']

Burada 1:4 ifadesi, indeks 1'den başlayıp indeks 4'e (dahil değil) kadar olan elemanları alır. Yani "süt" (indeks 1), "yumurta" (indeks 2) ve "peynir" (indeks 3) listeye dahil olurken, "domates" (indeks 4) dışarıda kalır. Step belirtilmediği için varsayılan olarak 1 kullanılır ve elemanlar teker teker alınır.

Eğer sadece notlar[:3] yazsaydınız, start belirtilmediği için baştan başlar ve ilk üç elemanı alırdınız. notlar[2:] yazsaydınız ise stop belirtilmediği için indeks 2'den listenin sonuna kadar giderdiniz.

Negatif İndekslerle Sondan Sayma

Python'da indeksler yalnızca 0'dan başlayıp pozitif yönde artmaz; negatif sayılarla listenin sonundan geriye doğru da sayabilirsiniz. Bu mantıkta -1 son elemanı, -2 sondan ikinci elemanı temsil eder ve bu şekilde geriye doğru gider.

Aynı notlar listesini kullanarak negatif indekslerin nasıl çalıştığına bakalım:

notlar = ["ekmek", "süt", "yumurta", "peynir", "domates"]

print(notlar[-2:])
# Çıktı: ['peynir', 'domates']

print(notlar[:-2])
# Çıktı: ['ekmek', 'süt', 'yumurta']

İlk örnekte -2: ifadesi, sondan ikinci elemandan (peynir) başlayıp listenin sonuna kadar gider. İkinci örnekte ise :-2 ifadesi, baştan başlayıp sondan ikinci elemana kadar (dahil değil) olan kısmı alır. Bu yöntem özellikle listenin uzunluğunu bilmediğiniz ama "son üç eleman" veya "sondaki bir eleman hariç hepsi" gibi ifadeler kullanmak istediğiniz durumlarda oldukça pratiktir.

Negatif Step ile Ters Sıralama

Önceki bölümde negatif indekslerle sondan saymayı gördün. Şimdi negatif step'e bakalım; bu, dilimlemenin en şaşırtıcı ama en kullanışlı özelliklerinden biri.

Normalde step pozitiftir ve listeyi baştan sona okur. Ama step değerini -1 yaparsan, Python listeyi sondan başa doğru okur:

sayilar = [1, 2, 3, 4, 5]
print(sayilar[::-1])  # [5, 4, 3, 2, 1]

Burada start ve stop boş bırakıldı, sadece step -1 verildi. Bu, "tüm listeyi al ama tersten oku" demenin en kısa yolu. Listeyi fiilen ters çevirmiş gibi görünse de aslında yeni bir liste oluşturuyorsun; orijinal sayilar değişmiyor.

Negatif step'i belirli bir aralıkla da kullanabilirsin:

print(sayilar[4:1:-1])  # [5, 4, 3]

Burada indeks 4'ten başlayıp indeks 1'e kadar (1 hariç) tersten gidiyor. Negatif step kullanırken start değeri stop değerinden büyük olmalı; aksi halde sonuç boş liste olur. Bu, pozitif step'teki mantığın tam tersi ve kafa karıştırabilir, o yüzden ters dilimleme yaparken start-stop sırasını kontrol etmek iyi bir alışkanlık.

Kısa Kod Tablosu: Dilimleme İfadeleri ve Çıktıları

Şu ana kadar görülen kuralları tek bir örnek üzerinden özetleyelim. Aşağıdaki liste için:

liste = [10, 20, 30, 40, 50]

| İfade | Sonuç | Açıklama | |---|---|---| | liste[1:3] | [20, 30] | İndeks 1'den 3'e (hariç) | | liste[:3] | [10, 20, 30] | Baştan 3. indekse kadar | | liste[2:] | [30, 40, 50] | 2. indeksten sona kadar | | liste[:] | [10, 20, 30, 40, 50] | Listenin tam kopyası | | liste[-2:] | [40, 50] | Sondan son iki eleman | | liste[:-2] | [10, 20, 30] | Sondaki iki eleman hariç | | liste[::2] | [10, 30, 50] | İkişer atlayarak | | liste[::-1] | [50, 40, 30, 20, 10] | Ters sıralı tam liste |

Bu tabloyu yanında bulundurmak, hangi kombinasyonun ne yaptığını hatırlamak için pratik bir referans olur. Özellikle [::2] ve [::-1] gibi kısayollar ilk bakışta kafa karıştırıcı gelse de, aslında hep aynı üç parametrenin (start, stop, step) farklı kombinasyonları.

Metinlerde Dilimleme: Aynı Mantık, Farklı Veri Türü

Buraya kadar hep listelerle çalıştık, ama dilimleme Python'da sırayla dizilmiş (sequence) her veri türünde aynı şekilde işler. String'ler de bu türlerden biri, dolayısıyla öğrendiğin her kural metinler için de geçerli:

metin = "Python"
print(metin[0:3])   # "Pyt"
print(metin[-3:])    # "hon"
print(metin[::-1])   # "nohtyP"

Fark yok: aynı start-stop-step mantığı, aynı negatif indeks kuralları, aynı negatif step davranışı. metin[::-1] bir string'i tersine çevirmenin en yaygın Python yoludur ve tam olarak listelerdeki [::-1] ile aynı prensibe dayanır.

Bu tutarlılık dilimlemenin gücünün bir parçası: listede öğrendiğin şey string'de, tuple'da hatta başka sıralı veri türlerinde de işe yarar. Tek bir sözdizimini öğrenip birçok veri türünde kullanabilirsin.

Dilimleme Yeni Bir Nesne Oluşturur

Python'da dilimleme, orijinal veriye bir referans vermez; her zaman yeni bir nesne oluşturur. Bu, özellikle listelerle çalışırken önemli bir ayrıntıdır çünkü beklenmedik yan etkilerin önüne geçer. Aşağıdaki örnek bunu açıkça gösterir:

sayilar = [1, 2, 3, 4, 5]
parca = sayilar[1:4]

parca[0] = 99

print(sayilar)  # [1, 2, 3, 4, 5]
print(parca)    # [99, 3, 4]

parca üzerinde yapılan değişiklik, sayilar listesini hiç etkilemedi. Çünkü sayilar[1:4] ifadesi çalıştığı anda, ilgili elemanların bir kopyası alınıp yeni bir liste olarak parca değişkenine atandı. Aynı davranış metinlerde de geçerlidir; zaten string'ler Python'da değiştirilemez (immutable) olduğu için bir dilimin orijinali etkilemesi zaten mümkün değildir.

Bu davranış, veriyi güvenli şekilde çoğaltmak istediğinizde işinize yarar. Örneğin bir listenin tamamının kopyasını almak için yeni_liste = liste[:] yazmak yaygın bir kullanımdır. Ancak burada dikkat edilmesi gereken bir nokta var: bu kopyalama "yüzeysel"dir (shallow copy). Yani liste içinde başka listeler veya sözlükler gibi iç içe (nested) yapılar varsa, dilimleme onların kendisini değil, referanslarını kopyalar. Bu durumda iç yapıdaki bir değişiklik hem orijinali hem de dilimlenmiş kopyayı etkiler. Basit sayı veya metin listelerinde bu bir sorun oluşturmaz, ancak karmaşık veri yapılarıyla çalışırken akılda tutulması gereken önemli bir ayrıntıdır.

Sık Sorulan Sorular

Dilimleme ile indeksleme arasındaki temel fark nedir?

İndeksleme (liste[2] gibi) tek bir eleman döndürür, dilimleme (liste[1:4] gibi) ise belirtilen aralıktaki elemanlardan oluşan yeni bir liste veya metin döndürür.

Dilimlemede aralık sınırları listenin boyutunu aşarsa hata mı alırız?

Hayır. Python dilimlemede sınır aşımına toleranslıdır; belirtilen indeks listenin sınırlarını aşsa bile hata vermez, sadece mevcut elemanlarla sınırlı bir sonuç döndürür.

Dilimleme performans açısından maliyetli midir?

Küçük ve orta boyutlu veriler için fark edilir bir maliyeti yoktur, ancak çok büyük listelerde her dilimleme yeni bir kopya oluşturduğu için bellek kullanımını artırabilir.

Bir listenin tamamını değiştirmeden kopyalamak için dilimleme yeterli midir?

Basit listeler için liste[:] yeterlidir, ancak iç içe listeler içeren yapılarda derin kopya için copy.deepcopy() fonksiyonu kullanılmalıdır.

Dilimleme, Python'da listeler ve metinlerle çalışırken sıkça başvurulan, öğrenildiğinde günlük kodlamayı oldukça kolaylaştıran bir araçtır.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara