ProgramlamaPython Geliştiricisi

Python'da liste dilimleme (list slicing) nedir, nasıl çalışır, neden döngüler yerine bunu kullanmalıyız ve bununla çalışırken hangi tuzaklar vardır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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:

  • Döngü olmadan alt listeleri almak için okunabilir sözdizimi
  • Aynı zamanda dizeler ve tuple'lar üzerinde de çalışır
  • Dilimleme, orijinal listeyi değiştirmez (bu tür listeler için yeni bir nesnedir)

Kandırıcı sorular.

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.


Tipik hatalar ve anti-dükkanlar

  • Alt listeleri almak veya kopyalamak için döngü kullanmak
  • lst[:] her zaman listenin bir kopyasını döndürdüğünü unutmamak, yeni bir referans değil
  • Dilimin orijinal nesneyi değiştireceğini beklemek, bu doğru değildir

Hayattan bir örnek

Olumsuz durum

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:

  • Her aşamada sürecin kontrolü

Eksiler:

  • Verimsiz
  • Okunması zor
  • Sınırları değiştirirken hatalar

Olumlu durum

Aynı kod, dilimleme ve yerleşik fonksiyonlar kullanılarak yazıldı, daha az satır alıyor, kolayca test ediliyor.

Artılar:

  • Yüksek hız
  • Derli toplu
  • Niyetin netliği

Eksiler:

  • Dilimleme sözdizimini bilmek gerektiriyor
  • Karmaşık filtrasyon (karmaşık bir predikat gerektiğinde) için her zaman uygun olmayabilir