Tarihçe
Listeler (list), Python'un ilk sürümlerinden itibaren temel yerleşik veri türlerinden biridir. Zamanla, iç yapısı, performansı ve programlama kolaylığını artırmak için geliştirilmiştir.
Sorun
Python'daki listelerin bağlı listeler değil, dinamik diziler olarak uygulandığını anlamak önemlidir. Yanlış bir anlayış, verimsiz koda veya işlemlerin karmaşıklığının hatalı hesaplanmasına yol açabilir.
Çözüm
Listeler, gerektiğinde tahsis edilen bellek boyutunu "sıçrayarak" (genişleyerek) artıran dinamik diziler olarak gerçekleştirilmiştir, böylece eleman ekleme işlemi sırasında sürekli masraflardan kaçınılır. Bu, listenin sonuna eleman ekleyip çıkarmayı amortize edilmiş O(1) süre ile mümkün kılar. Ortada veya başta ekleme veya silme işlemi, elemanların taşınmasını gerektirir ve bu O(n) zaman alır.
Örnek kod:
my_list = [1, 2, 3] my_list.append(4) # Sonuna ekleme my_list.insert(1, 'a') # İndekse göre ekleme print(my_list)
Temel özellikler:
Python'daki list'i C'deki dizi ile analojik olarak değerlendirebilir miyiz? Farkı nedir?
Hayır, C'deki dizi sabit tipte elemanlar içerir ve bellekte yan yana yerleştirilir. Python list'i ise, her biri yığındaki bağımsız bir nesneye işaret eden nesne işaretçileri dizisidir.
Bir döngüde listenin başına eleman eklemeye çalışırsak ne olur? Bu hızlı mı?
Hayır, bu yavaştır: başa ekleme (position 0) sırasında her seferinde mevcut tüm elemanlar sağa kaydırılır. Amortize karmaşıklık — O(n) işlemdir ve büyük listelerde performans düşüşüne neden olur.
Listeler için + ile append/extend operatörleri arasındaki fark nedir?
lst1 = [1, 2] lst2 = [3, 4] lst3 = lst1 + lst2 # lst3 — yeni liste lst1.append(lst2) # lst1 [1, 2, [3, 4]] olur lst1.extend(lst2) # lst1 [1, 2, 3, 4] olur, eğer lst1 önceki append'den sonra sıfırlanmadıysa
Bir projede ilk elemanları saklamak ve sürekli silmek için liste kullanıldı. Büyük veri miktarlarında gözle görülür bir yavaşlama fark edildi.
Artılar:
Eksiler:
Sorunun fark edilmesinden sonra liste, bu tür işlemler için optimize edilen collections.deque ile değiştirildi.
Artılar:
Eksiler: