Set, Benzersiz Elemanların Sırasız Bir Torbasıdır
Listeler ve tuple'lar sırayı umursarken set'ler umursamaz. Listeler yinelenenlerin birikmesine izin verirken set'ler onları sessizce atar. İki belirli ihtiyacın olduğunda doğru veri yapısı set'tir:
- Benzersiz elemanlar istiyorsun, nokta.
- Üyeliği hızlı kontrol etmek istiyorsun.
Bir tanesini süslü parantezlerle yaz:
İkinci set'teki yinelenen "red" ve "green" basitçe kaybolur. Bu bir hata değil — işin özü bu.
Set Oluşturmak
Aslında kullanacağın iki yol:
Son nokta herkesi bir kez yakalar: {} boş bir sözlük oluşturur, boş bir set değil. Söz dizimsel belirsizliğin birine düşmesi gerekiyordu ve dict'ler kazandı.
Ekleme ve Kaldırma
remove ile discard arasındaki temel fark: remove elemanın var olmasında ısrarcıdır; discard umursamaz. Elemanın yokluğunun bir hata olup olmadığına göre seç.
Hızlı Üyelik
Set'lerin yerini asıl burada kazandığı yer. x in some_set sabit zamanda çalışır, set ne kadar büyük olursa olsun. x in some_list ise listede dolaşmak zorundadır ve liste büyüdükçe yavaşlar.
Genel kural: bir döngü içinde if x in some_list yazdığını fark ettiğinde ve liste birkaç düzineden fazla eleman içeriyorsa, önce listeyi bir set'e dönüştür.
Set Matematiği
Set'lerin gerçekten eğlenceli hâle geldiği yer burası. Onları matematiksel set işlemlerini yansıtan operatörlerle birleştirebilirsin:
Her operatörün bir metot hâli de var (.union(), .intersection(), .difference(), .symmetric_difference()). Operatörler daha kompakt; metot biçimleri başka bir set dışında herhangi bir iterable kabul eder.
Bir Listeden Yinelenenleri Kaldırmak
Set'lerin en yaygın kullanımlarından biri, "set mantığı"nın dışında bile:
Tek satır, yinelenenler yok oldu. Dikkat edilmesi gereken bir şey: sıra korunmaz. Hem teklik hem de orijinal sıra istiyorsan, onun yerine dict.fromkeys() kullan:
Modern Python'da dict'ler eklenme sırasını korur ve dict.fromkeys iterable'ın elemanlarını anahtar olarak kullanarak bir dict inşa eder — etkili biçimde sıralı bir set.
Alt Küme ve Üst Küme
Bir set'in bir diğerinin içinde olup olmadığını kontrol etmek:
Bunlar izin kontrolleri gibi şeylerde karşına çıkar ("bu kullanıcının tüm gerekli rolleri var mı?").
Bir Set'e Neler Girebilir
Yalnızca hashlenebilir öğeler. Bu teknik bir terim — pratikte şu demek:
- Değişmez şeyler hashlenebilir: sayılar, stringler, hashlenebilir elemanlardan oluşan tuple'lar, frozenset'ler.
- Değiştirilebilir şeyler değildir: listeler, dict'ler, diğer set'ler set üyesi olamaz.
Set'lerden oluşan bir set istiyorsan frozenset kullan — set'in değişmez bir sürümüdür.
İterasyon Sırasızdır
Bir set üzerinde döngü kurmak, sana garantili bir sıra olmadan elemanları verir:
Bunu birkaç kez çalıştır; sıranın değiştiğini göreceksin. Sıra önemliyse, set doğru yapı değildir — ihtiyacın olduğunda içeriği sırala ya da bir liste kullan.
Set Ne Zaman Kullanılmaz
Şu koşullardan biri doğruysa, liste ya da dict muhtemelen daha iyi uyar:
- Sırayı önemsiyorsan.
- Yinelenenleri saklaman gerekiyorsa.
- Her elemanın ilişkili verisi varsa (elemanı anahtar olarak alan bir dict kullan).
Devam
Set'ler teklik ve üyeliği halleder. Sözlükler — sırada — daha geniş "bir anahtarla bir değeri ara" kalıbını halleder; bu da Python'daki en kullanışlı liste dışı veri yapısıdır.
Sıkça Sorulan Sorular
Python set'i nedir?
Set, benzersiz elemanlardan oluşan sırasız bir koleksiyondur. Set'ler, anahtar-değer çiftleri olmadan süslü parantezler kullanır: colors = {'red', 'green', 'blue'}. Aynı değeri iki kez eklemenin hiçbir etkisi yoktur — yinelenenler sessizce atılır.
Liste yerine ne zaman set kullanmalıyım?
Teklik önemliyse ya da çok sayıda üyelik kontrolü (x in collection) yapacaksan set kullan. Set'ler yinelenenleri otomatik olarak kaldırır ve üyeliği sabit zamanda kontrol eder; bu da büyük koleksiyonlarda listelere göre büyük bir hız kazanımıdır.
Python'da boş set'i nasıl oluştururum?
{} değil, set() kullan — içi boş süslü parantezler boş bir set değil, boş bir sözlük oluşturur. Bir set elinde olduktan sonra .add(value) ile eleman ekleyebilirsin.