# Python Kümeler

Python kümeler (sets) konusunu işliyoruz.

Python koleksiyonlar (diziler) altında yer alan küme (set) veri tipimiz sıralanamayan , değiştirilemeyen, indekslenemeyen ve çoğul elemana izin vermeyen bir veri tipidir. Süslü parantezlerle { } oluşturulur.

kume = {"elma","armut","çilek"}

Eleman olmadan sadece parantezlerle boş bir küme oluşturamazsınız.

kume = {} # !!! Küme değil Sözlük veri tipi !!!
print(type(kume)) # <class 'dict'>

Kümeler aynı zamanda bir set() fonksiyonu ile de oluşturulabilir ve constructor yöntemiyle başlangıçta elemanları ayarlanabilir.

kume = set()
kume = set(("Ankara","İstanbul","Kayseri"))

Oluşturduğumuz küme değişkenlerinin tipini kontrol edelim.

print(type(kume)) # <class 'set'>

1. Küme Elemanlarına Erişim

Başlangıçta küme veri tipinin indekslenemeyeceğini söylemiştik. Bu nedenle bir indeks numarası belirterek herhangi bir elemana erişemezsiniz. Bunun yerine kümemizi for ile bir döngüye sokarak elemanları yazdırabiliriz.

kume = {"elma","armut","çilek"}
for x in kume:
print(x)

Bu şekilde kümenin tüm elemanları x değeri üzerinden otomatik olarak listelenecek ve dizi elemanı bittiğinde döngü duracaktır.

2. Küme Eleman Sayısını Öğrenme

Elinizde olan bir kümenin eleman sayısını öğrenmek için len() fonksiyonunu kullanacağız.

kume = {"a","b","c","d"}
print(len(kume)) #4

3. Bir Elemanın Varlığını Kontrol Etme

Kümede bir elemanın olup olmadığını kontrol etmek için in terimini kullanacağız. Eğer eleman varsa True , yoksa False değerini alırız.

kume = {"a","b","c","d"}
print("b" in kume) # True
print("f" in kume) # False

4. Küme Elemanının Değerini Değiştirme

Bir küme oluşturduğunuzda tıpkı demetlerde olduğu gibi artık elemanlarını değiştiremezsiniz.

5. Kümeye Yeni Eleman Ekleme

Oluşturduğumuz kümeye yeni bir eleman eklemek için add() fonksiyonunu kullanabilirsiniz.

kume = {"a","b","c"}
kume.add("g")
print(kume) # {"b","c","g","a"}

Eğer tek seferde birden fazla eleman eklemek istiyorsanız update() fonksiyonunu kullanabilirsiniz.

kume = {"a","b","c"}
kume.update(["x","y","z"])
print(kume) # {'y', 'c', 'b', 'x', 'z', 'a'}

Kümeye toplu eleman eklerken update() fonksiyonuna bir liste veya demet göndererek de ekleme işlemi yapabilirsiniz.

kume = {"a","b","c"}
liste = ["x","y","z"]
demet = (1,2,3)
kume.update(liste)
kume.update(demet)
print(kume) # {1, 2, 3, 'y', 'a', 'x', 'c', 'b', 'z'}

Küme elemanlarını ekrana yazdırdığınızda elemanların karışık bir halde geldiğini görürsünüz. Kümeler sıralanamayan bir veri tipi olduğu için her seferinde elemanların yeri değişir.

6. Kümeden Bir Eleman Çıkarmak

Kümemizden bir elemanı çıkarmak istediğimizde remove() veya discard() fonksiyonlarını kullanabiliriz. Her iki fonksiyonda işlevsellik olarak aynıdır.

kume = {"a","b","c","d"}
kume.remove("b")
print(kume) # {'a', 'c', 'd'}
```py kume = {"a","b","c","d"}
kume.discard("b")
print(kume) # {'d', 'c', 'a'}

Her iki fonksiyonda işlevsel olarak aynı olmasına rağmen kümede olmayan bir elemanı kaldırmaya çalıştığınızda remove() fonksiyonu hata mesajı verirken , discard() fonksiyonu hata mesajı vermez .

Bu iki fonksiyonun dışında kümenin sondaki elemanını çıkarmak için pop() fonksiyonunu kullanabiliriz. Fakat kümeler sıralanamayan bir veri tipi olduğundan ve her seferinde elemanların yeri değişeceğinden hangi elemanın kümeden çıkarılacağı pop() fonksiyonunda belli olmaz.

kume = {"a","b","c","d"}
kume.pop()
print(kume) # {'a', 'c', 'b'}

Kümedeki tüm elemanları çıkararak kümeyi temizlemek istediğinizde boş bir küme elde etmek için clear() fonksiyonunu kullanabilirsiniz.

kume = {"a","b","c","d"}
kume.clear()
print(kume) # set()

7. Kümeyi Tamamen Silmek

Kümeden elemanları çıkarmak veya kümeyi temizlemek yerine isterseniz kümenizi tamamen silebilirsiniz. Bunun için del terimini kullanabilirsiniz. Fakat kümeyi sildikten sonra kullanmaya çalışırsanız hata alacaksınızdır.

kume = {"a","b","c","d"}
del kume
print(kume) # !!! HATA VERİR !!!

8. Küme Kopyalamak ve Çoğaltmak

Elimizde olan bir kümeyi kopyalayarak çoğaltmak için copy() fonksiyonunu kullanabilirsiniz.

kume = {"a","b","c","d"}
yenikume = kume.copy()
print(yenikume) # {'a', 'd', 'b', 'c'}

Başka bir basit yöntemde kopyalanacak kümeyi belirterek yeni bir küme oluşturmaktır.

kume = {"a","b","c","d"}
yenikume = set(kume)
print(yenikume) # {'b', 'a', 'c', 'd'}

11. İki Farklı Kümeyi Birleştirmek

Birbirinden farklı veya aynı iki kümeyi birleştirmek için union() ve update() fonksiyonlarını kullanabiliriz.

kume1 = {"A","B","C"}
kume2 = {"D","E"}
kume3 = kume1.union(kume2)
print(kume3) # {'E', 'C', 'D', 'B', 'A'}
kume1 = {"A","B","C"}
kume2 = {"D","E"}
kume1.update(kume2)
print(kume1) # {'D', 'C', 'E', 'B', 'A'}

Küme veri tipindeki değişkenler aynı elemandan birden fazla bulunmasına izin vermeyeceği için kümeleri birleştirirken eğer aynı elemandan mevcutsa kümeden çıkarılacaktır.

kume1 = {"A","B","C"}
kume2 = {"A"}
kume3 = kume1.union(kume2)
print(kume3) # {"A","B","C"}

12. İki Farklı Kümenin Kesişimini Almak

Öncelikle elimizdeki iki kümenin kesişimi olup olmadığını öğrenmek için isdisjoint() fonksiyonunu kullanabiliriz. Eğer kümelerin kesişimi varsa False , yoksa True değeri döner.

kume1 = {"A","B","C"}
kume2 = {"A","D"}
kume3 = {"F","G"}
print(kume1.isdisjoint(kume2)) # False
print(kume1.isdisjoint(kume3)) # True

İki kümenin kesişimini almak için intersection() fonksiyonunu kullanabiliriz.

kume1 = {"A","B","C"}
kume2 = {"A","D"}
kesisim= kume1.intersection(kume2)
print(kesisim) # {"A"}

Eğer iki kümenin kesişimini aldıktan sonra kümeyi bu kesişim elemanlarıyla güncellemek isterseniz intersection_update() fonksiyonunu kullanabiliriz.

kume1 = {"A","B","C"}
kume2 = {"A","D"}
kume1.intersection_update(kume2)
print(kume1) # {"A"}

13. İki Farklı Kümenin Farkını Almak

Bir kümenin diğer kümeden farkını almak için difference() fonksiyonunu kullanabilirsiniz.

kume1 = {"A","D","G"}
kume2 = {"A","B","C","D"}
# kume1 in kume2 den farkı
fark = kume1.difference(kume2)
print(fark) # {"G"}

Eğer iki kümenin farkını aldıktan sonra kümeyi bu fark elemanlarıyla güncellemek isterseniz difference_update() fonksiyonunu kullanabiliriz.

kume1 = {"A","D","G"}
kume2 = {"A","B","C","D"}
#kume1 in kume2 den farkı
kume1.difference_update(kume2)
print(kume1) # {"G"}

14. Kümenin Alt Küme Olup Olmadığını Kontrol Etme

Elimizdeki kümenin başka bir kümenin alt kümesi olup olmadığını kontrol etmek için issubset() fonksiyonunu kullanabiliriz.

kume1 = {"A","B"}
kume2 = {"A","B","C","D"}
print(kume1.issubset(kume2)) # True

14. Kümenin Üst Küme Olup Olmadığını Kontrol Etme

Elimizdeki kümenin başka bir kümenin üst kümesi olup olmadığını kontrol etmek için issuperset() fonksiyonunu kullanabiliriz.

kume1 = {"A","B"}
kume2 = {"A","B","C","D"}
print(kume2.issuperset(kume1)) # True