Python kümeler nasıl kullanılır? Kümeler, tekrarlı verileri tekilleştirmek ve bir değerin koleksiyonda bulunup bulunmadığını kontrol etmek için kullanılır. Bir listenin sıra bilgisi veya aynı değerin kaç kez tekrar ettiği önemliyse liste ya da demet seçmelisin; küme bu bilgileri korumayı amaçlamaz.
Bir listeyi set() ile kümeye dönüştürerek tekrar eden elemanları tekilleştirebilirsin. Küme oluştururken her eleman yalnızca bir kez tutulur.
Python kümesi nasıl oluşturulur?
Boş olmayan bir kümeyi süslü parantezlerle oluşturabilirsin. Aynı değer birden fazla yazılsa bile kümede tek kez bulunur. Liste, demet veya başka bir yinelenebilir nesne set() içine verilerek de kümeye dönüştürülebilir.
sayilar = {1, 2, 2, 3}
liste = [3, 3, 4, 5]
donusen_kume = set(liste)
bos_kume = set()
bos_sozluk = {}
print(sorted(sayilar))
print(sorted(donusen_kume))
print(type(bos_kume).__name__)
print(type(bos_sozluk).__name__)
Beklenen çıktı şöyledir:
[1, 2, 3]
[3, 4, 5]
set
dict
sorted() burada yalnızca çıktıyı okunabilir ve öngörülebilir göstermek için kullanılır. Kümenin kendisini sıralı bir yapı gibi değerlendirmemelisin. Boş küme oluşturmak için set() yazılır. {} ifadesi ise boş küme değil, boş sözlük oluşturur.
add, update, remove ve discard nasıl çalışır?

Bu metotlar mevcut kümeyi doğrudan değiştirir:
add(eleman), kümeye tek bir eleman ekler. Eleman zaten varsa kümede ikinci kez oluşturulmaz.update(yinelenebilir), verilen liste, demet veya küme içindeki elemanları ekler.remove(eleman), belirtilen elemanı siler. Eleman bulunamazsaKeyErrorüretir.discard(eleman), belirtilen elemanı siler. Eleman yoksa hata vermeden devam eder.
beceriler = {"Python"}
beceriler.add("SQL")
beceriler.update(["Git", "Java"])
beceriler.remove("SQL")
beceriler.discard("C++")
print(sorted(beceriler))
Beklenen çıktı:
['Git', 'Java', 'Python']
Bu örnekte add() tek bir değer eklerken update() listedeki iki değeri ekledi. remove() mevcut olan "SQL" elemanını sildi. "C++" kümede bulunmadığı hâlde discard() hata üretmedi. Metinler de yinelenebilir nesnedir. Bu nedenle beceriler.update("Go") yazıldığında "Go" tek eleman olarak değil, "G" ve "o" karakterleri olarak eklenebilir. Tek bir metni eleman olarak eklemek için add("Go") kullanmalısın.
Kümelerde üyelik ve temel işlemler nasıl yapılır?
Bir elemanın kümede bulunup bulunmadığını kontrol etmek için in ve not in operatörlerini kullanabilirsin. Örneğin 'python' in a ifadesi, python elemanı a kümesindeyse True sonucunu verir. 'sql' not in a ise sql elemanının kümede bulunmadığını kontrol eder.
İki küçük küme tanımlayalım: a = {'python', 'java'} ve b = {'python', 'sql'}. Bu kümeler üzerinde temel işlemler şöyle yapılır:
a | bveyaa.union(b): Birleşim işlemidir. Her iki kümede bulunan tüm farklı elemanları verir.a & bveyaa.intersection(b): Kesişim işlemidir. İki kümede ortak bulunan elemanları verir. Bu örnekte ortak elemanpythonolur.a - bveyaa.difference(b): Fark işlemidir. Yalnızcaaiçinde bulunan vebiçinde bulunmayan elemanları verir. Sonuçtajavakalır.a ^ bveyaa.symmetric_difference(b): Simetrik fark işlemidir. Yalnızca kümelerden birinde bulunan elemanları verir. Bu örnektejavavesqlbulunur.
Fark işlemi yönlüdür. Yani a - b ile b - a aynı sonucu vermek zorunda değildir. Ayrıca kümeler yazdırılırken elemanların ekranda hangi sırada görüneceğine güvenmemelisin.
Tekrarlı katılımcılar ve ortak ilgi alanları nasıl bulunur?

Bir listede aynı katılımcı birden fazla kez bulunuyorsa set() kullanarak tekrarları kaldırabilirsin. İki grubun ortak ilgi alanlarını bulmak içinse kesişim operatörü olan & kullanılabilir.
# Katılımcı adlarını, tekrarları koruyan bir liste olarak tanımlıyoruz.
katilimcilar = ['Ada', 'Deniz', 'Ada', 'Ece', 'Deniz']
# Listeyi kümeye çevirerek tekrar eden adları kaldırıyoruz.
benzersiz_katilimcilar = set(katilimcilar)
# Kümeyi yalnızca okunabilir bir çıktı için sıralanmış listeye dönüştürüyoruz.
katilimci_ciktisi = sorted(benzersiz_katilimcilar)
# Birinci grubun ilgi alanlarını küme olarak tanımlıyoruz.
ilgi_alani_a = {'python', 'algoritma', 'oyun'}
# İkinci grubun ilgi alanlarını küme olarak tanımlıyoruz.
ilgi_alani_b = {'python', 'veri', 'oyun'}
# İki grubun ortak ilgi alanlarını kesişim işlemiyle buluyoruz.
ortak_ilgiler = ilgi_alani_a & ilgi_alani_b
# Ortak ilgi alanlarını okunabilir bir çıktı için sıralıyoruz.
ortak_ilgi_ciktisi = sorted(ortak_ilgiler)
# Tekrarsız katılımcı listesini ekrana yazdırıyoruz.
print(katilimci_ciktisi)
# Ortak ilgi alanlarını ekrana yazdırıyoruz.
print(ortak_ilgi_ciktisi)
Beklenen çıktı:['Ada', 'Deniz', 'Ece']['oyun', 'python']
sorted() burada kümeyi sıralı hâle getirmez. Kümeyi değiştirmeden, sonucu okunabilir ve bu örnekte tekrarlanabilir bir sıraya sahip ayrı bir liste olarak sunar. Kümeler ve temel Python veri yapıları konusundaki bilgini yoklamak için Python bilgi testini çözebilirsin.
Kümelerin sınırları: değiştirilebilirlik, eleman türü ve sıra
Kümenin kendisi değiştirilebilir bir veri yapısıdır. Oluşturduğun kümeye add() ve update() ile eleman ekleyebilir, remove() ve discard() ile eleman çıkarabilirsin. Ancak kümeye eklenecek her elemanın hashlenebilir olması gerekir.
Sayılar, metinler ve bütün elemanları uygun olan demetler küme elemanı olabilir. Örneğin (1, 'Python') kullanılabilir. Buna karşılık liste, sözlük ve başka bir değiştirilebilir set doğrudan küme elemanı yapılamaz. Elemanlarının içinde liste bulunan bir demet de hashlenebilir olmadığı için kullanılamaz.
Kümeler indekslenemez. Bu nedenle kume[0] biçiminde bir erişim yapamazsın. Ayrıca yineleme veya ekrana yazdırma sırasında görülen sıraya güvenmemelisin. Özgün sıra önemliyse kaynak veriyi bir listede koru, kümeyi ise tekrarlı değerleri ayıklamak ve üyelik kontrolü yapmak için kullan.
Liste, demet ve küme arasında nasıl seçim yapılır?
Seçimi veri üzerinde hangi işlemleri yapacağına göre yapabilirsin. Aşağıdaki karşılaştırma, üç yapının temel farklarını gösterir.
| Veri yapısı | Tekrar | Sıra | Değiştirilebilirlik | Uygun kullanım amacı |
|---|---|---|---|---|
| Liste | Tekrarlar korunur | Sıra korunur, indeks kullanılabilir | Değiştirilebilir | Sıralı kayıtlar ve tekrarın önemli olduğu veriler |
| Demet | Tekrarlar korunur | Sıra korunur, indeks kullanılabilir | Demetin yapısı değiştirilemez | Sabit ve sıralı değer grupları |
| Küme | Tekrarlar tutulmaz | Güvenilecek bir sıra ve indeks yoktur | Değiştirilebilir | Tekilleştirme, üyelik ve küme işlemleri |
Aynı veriyi üç farklı yapıya dönüştürdüğünde farkı daha net görebilirsin:
veriler = ['Python', 'Java', 'Python']
liste = list(veriler) # Tekrar ve sıra korunur
demet = tuple(veriler) # Tekrar ve sıra korunur
kume = set(veriler) # Tekrarlar kaldırılır
print(liste)
print(demet)
print(kume)
İlk satırda ['Python', 'Java', 'Python'], ikinci satırda ('Python', 'Java', 'Python') görülür. Üçüncü satırda Python ve Java birer kez bulunur. Kümenin ekrana yazdırılma sırası değişebilir.
- Tekrarlar korunacak mı? Evetse liste veya demet kullan. Tekrarsızlık gerekiyorsa kümeyi değerlendir.
- Sıra veya indeks gerekli mi? Gerekliyse liste ya da demet seç. Kümede konuma göre erişim yapılmaz.
- Koleksiyon sonradan değişecek mi? Değişecekse liste uygundur. Sabit kalacak ve sıralı bir grup oluşturacaksa demet uygun adaydır. Üyelik, tekilleştirme, birleşim, kesişim veya fark işlemleri gerekiyorsa küme daha anlamlıdır.
Sık Sorulan Sorular
Python’da boş küme neden {} ile değil set() ile oluşturulur?
{} Python’da boş sözlük oluşturur. Boş küme oluşturmak için set() yazmalısın. Eleman içeren kümelerde ise süslü parantez kullanılabilir.
remove() ile discard() arasında hangi fark vardır?
Her iki metot da kümeden eleman çıkarmak için kullanılır. Aranan eleman yoksa remove() KeyError oluşturur, discard() ise işlem yapmadan devam eder.
Bir kümeye liste, sözlük veya başka bir küme eklenebilir mi?
Hayır. Liste, sözlük ve değiştirilebilir küme doğrudan küme elemanı yapılamaz. Kümeye eklenecek değerlerin hashlenebilir olması gerekir.
Tekrarlı verileri kümeye çevirince özgün sıra neden korunmayabilir?
Küme, verileri kaynak listedeki konumlarına göre değil, küme yapısının çalışma biçimine göre tutar. Bu nedenle tekrarlar kaldırılırken özgün sıra da güvenilecek bir özellik olarak korunmaz.
Liste, demet ve küme arasındaki seçimi kullanım amacına göre yaptığında Python’da veri yapılarıyla çalışmak daha anlaşılır hâle gelir. Python öğrenimini birebir sürdürmek istersen birebir Python dersleri hakkında bilgi alabilirsin.