Konu Tarihi:
Kümeler (set), Python'da Python 2.4 sürümünden itibaren ayrı bir yerleşik tür olarak tanıtılmıştır (bundan önce, harici bir modül olarak uygulanıyordu). Benzersiz, sırasız öğeleri verimli bir şekilde saklamaya ve küme teorisi ile ilgili standart işlemler desteklemeye olanak tanır: birleşim, kesişim, fark, simetrik fark ve alt küme kontrolü.
Problemi:
Set olmadan, listeler kullanmak gerekir ki bu da benzersiz öğeleri verimli bir şekilde aramayı zorlaştırır ve birçok katılım kontrolü kullanan algoritmaları yavaşlatır. Set, bir hash tablosu aracılığıyla uygulanmıştır, bu nedenle arama, ekleme ve silme işlemleri amortisize edilmiş O(1) zamanda gerçekleştirilir. Ancak bu yapı, beklenmedik sorunlara neden olabilir - örneğin, öğelerin sırasının kaybolması, öğe türleri üzerinde kısıtlamalar (değiştirilemez ve hashlenebilir olmalıdırlar) ve kümelerin karşılaştırma özellikleri ve diğer yapılarla etkileşimi hakkında yanlış anlamalar.
Çözüm:
Benzersiz öğeleri saklamak ve bunlar üzerinde küme teorisi işlemleri gerçekleştirmek gerektiğinde set kullanmak. Öğelerin hashlenebilir olması gerektiğini hatırlamak önemlidir (örneğin, sayılar, dizgiler, tuple ama listeler ve dict değil). Set ile çalışmak için oldukça zengin bir yerleşik yöntem seti sunulmaktadır (add, remove, union, intersection, difference, issubset vb.).
Kod Örneği:
s1 = {1, 2, 3, 4} s2 = {3, 4, 5} print(s1 | s2) # {1, 2, 3, 4, 5} (birleşim) print(s1 & s2) # {3, 4} (kesişim) print(s1 - s2) # {1, 2} (fark) print(3 in s1) # True (katılım kontrolü)
Ana Özellikler:
Değiştirilebilir türleri (örneğin, listeleri) set'e ekleyebilir miyiz?
Hayır, kümenin elemanları hashlenebilir ve değiştirilemez olmalıdır. Bir liste veya dict, set'e eklenemez, Python TypeError fırlatır.
s = set() s.add([1, 2, 3]) # TypeError: unhashable type: 'list'
Set, öğelerin sırasını korur mu?
Hayır. Set oluşturulduğundan itibaren, öğeler eklendiği sıraya bağlı olarak garantili bir şekilde geri döndürülmez, özellikle kümenin boyutu değiştiğinde.
s = {5, 2, 8, 1} print(s) # Sıra belirli değil
Set ile frozenset arasındaki fark nedir ve frozenset'i set'in bir elemanı olarak kullanabilir miyiz?
Frozenset, set'in değiştirilemez bir versiyonudur. Bununla birlikte başka bir set'in elemanı veya dict anahtarı olarak kullanılabilir çünkü hashlenebilir.
fs = frozenset([1, 2, 3]) s = set() s.add(fs) # TAMAM
Bir geliştirici benzersiz öğeleri saklamak istedi ve set'i seçti, ancak eklenme sırasını dikkate almadı. Sonuç olarak, iş mantığının bir kısmı, işleme sırasına bağlı olarak çalışmayı bıraktı.
Artılar:
Eksiler:
Büyük bir veri kümesinden benzersiz kayıtları hızlı bir şekilde filtrelemek gerekiyordu, bu nedenle yalnızca benzersizlik faktörü önemliydi, sıralama değil. Performans önemli ölçüde arttı ve kod sadeleşti.
Artılar:
Eksiler: