Soru tarihi: Dilimleme (slicing), Python'da başlangıçtan itibaren, sırayla geçiş yapmadan dizilerin parçalarını almak için sözdizimsel olarak kullanışlı bir yol olarak ortaya çıkmıştır.
Sorun: Diğer dillerden gelen programcılar genellikle alt listelerle çalışmak için açık döngüler kullanıyorlar. Bu, kodun hacmini artırıyor ve performansını düşürüyor.
Çözüm: Liste dilimleme, liste, dize veya diğer dizilerin parçalarını derli toplu, anlaşılır ve etkili bir şekilde elde etmemizi sağlar. Dilimler, orijinal nesneyi değiştirmez, onun bir kopyasını veya görünümünü döndürür (bazı türler için).
Kod örneği:
lst = [0, 1, 2, 3, 4, 5] sub = lst[1:4] # [1, 2, 3] reverse = lst[::-1] # [5, 4, 3, 2, 1, 0] every_second = lst[::2] # [0, 2, 4]
Anahtar özellikler:
Dilimdeki bir değeri değiştirmek, orijinal listeyi etkiler mi?
Hayır: Eğer bir dilime yeni bir liste atarsanız, bu, o pozisyonlarda orijinal listeyi değiştirir; ancak dilimi alırken yeni bir liste elde edersiniz.
Örnek:
lst = [1, 2, 3, 4] lst2 = lst[1:3] # [2, 3] lst2[0] = 20 # lst'yi etkilemez: lst2 yeni bir nesne
Ancak:
lst[1:3] = [7, 8] # bu doğrudan lst'yi değiştirir
Negatif indekslerle dilim nasıl çalışır?
Negatif indeksler sondan itibaren sayılır: -1 — son eleman, -2 — sondan bir önceki. Örneğin, lst[:-1] son eleman hariç tüm elemanları ifade eder.
Dilimde listenin sınırlarını aşarsak ne olur?
Python "zekice" bu durumları işler: hata olmaz, sadece dilim mevcut sınırlar içinde kısalır. Örneğin, lst[100:200] boş bir liste veya mümkün olan en büyük alt listeyi verir.
Bir listenin işlenmesi, "giriş verilerini dilimleme" için iç içe döngüler ve koşullarla yüzlerce satır alıyor, kod karmaşık ve yavaş.
Artılar:
Eksiler:
Aynı kod, dilimleme ve yerleşik fonksiyonlar kullanılarak yazıldı, daha az satır alıyor, kolayca test ediliyor.
Artılar:
Eksiler: