Python’da Kümeler (Set)
Python’da “set” (küme); “list” (liste), “tuple” (küme) ve “dictionary” (sözlük) ile beraber platformda gömülü halde bulunan ve veri koleksiyonlarını depolamak için kullanılan dört veri tipinden biridir. Biz bu yazımızda ise Python’daki kümelerin ne tür özellikleri olduğunu, nasıl oluşturulup kullanıldığını adım adım inceleyeceğiz.
“Set” İsmi Nereden Geliyor?
Küme (set) ismi, matematikteki küme teorisi kavramından gelir. Matematikte bir küme, tekrarlanan elemanları olmayan, sırasız bir eleman grubudur. Python’daki küme veri yapısı da bu matematiksel küme kavramını model alır; aynı eleman yalnızca bir kez bulunur ve sıralama yoktur.
Python’da kümeler, benzersiz elemanların sırasız bir şekilde oluşturduğu koleksiyon yapısıdır. “List” ve “tuple” koleksiyon yapılarından farklı olarak indekslenemezler. Haliyle küme elemanları da rastgele bir şekilde dizilir. Bu da demektir ki, hangi elemanın hangi sırada olduğu asla bilinemez. Zaten bu tanım, matematikteki kümelere ait bir özellik olup çalışma mantığını da buradan almıştır. Zira matematik derslerinde öğrendiğimiz üzere, kümeler aynı elemandan sadece bir tane bulundurabilir.
Yani özetle diyebilir ki, Python’da kümeler, birden fazla elemanı bir arada tutan ve tekrarlanan elemanları otomatik olarak filtreleyen bir veri yapısıdır.
Python’da “Set” Bildirimi
Python’da kümeleri tanımlamak için küme parantezlerinden {}
yararlanırız. Her bir eleman birbirlerinden virgül (,
) ile ayrılır. Farklı meyve isimlerini “set” koleksiyonu içinde saklamak istediğimizi düşünelim. Bu örneği aşağıdaki gibi kodlayabiliriz:
meyveler = {"elma", "muz", "portakal"}
Bir “küme” tanımladığımızda, içine yazılan elemanların sırası belirli değildir ve bu sıra her çalıştırdığımızda değişebilmektedir. Bunun nedeni ise iç yapısının tasarımıyla ilgilidir; çünkü kümelerin ana amacı elemanların hızlı bir şekilde aranabilmesi ve eşsiz olmasıdır, sıralı olması değil. Haliyle “küme” içerisindeki bir elemana indeksle ulaşmaya çalıştığımızda TypeError
hatası alırız.
Eğer “küme” içerisinde bir elemanın olup olmadığını kontrol etmek istersek in
anahtar kelimesinden faydalanırız. Bakınız:
meyveler = {"elma", "muz", "portakal"}
if "elma" in meyveler:
print("Elma meyve setinde bulunmaktadır.")
Bu kod, “elma”nın meyveler
set’inde olup olmadığını kontrol eder ve eğer varsa ekrana bir mesaj yazdırır. “Peki hangi durumlarda kullanabiliriz?” Diyelim ki bir anket düzenliyorsunuz ve katılımcılardan belirli konularla ilgili oy kullanmalarını istiyorsunuz. Her katılımcı yalnızca bir oy kullanabilir ve aynı kişinin birden fazla kez oy kullanmasını önlemek istiyorsunuz. “Set” yapısı bu tür durumlarda, benzersiz elemanları saklamak ve hızlıca kontrol etmek için oldukça etkilidir.
# Oy kullanan katılımcıları saklayacağımız bir set oluşturuyoruz
oy_kullananlar = {"12345", "67890", "54321"} # Öğrenci ya da kimlik numaraları
# Yeni bir katılımcı oy kullanmaya çalışıyor
yeni_oy_kullanan = "12345"
# Katılımcının daha önce oy verip vermediğini kontrol ediyoruz
if yeni_oy_kullanan in oy_kullananlar:
print(f"Katılımcı {yeni_oy_kullanan}, zaten oy kullandı!")
else:
oy_kullananlar.add(yeni_oy_kullanan)
print(f"Katılımcı {yeni_oy_kullanan}, başarıyla oy kullandı.")
# Çıktı: Katılımcı 12345, zaten oy kullandı!
Python’da Kümelere Eleman Eklemek
Python’da kümelere eleman eklemek için add()
metodu kullanılır. Eğer birden fazla eleman eklemek istiyorsanız update([ ]) metodunu kullanmalısınız.
ornekSet = {"kalem", "silgi", "açkı"}
ornekSet.add("sözlük")
print(ornekSet) #çıktı: {'kalem', 'sözlük', 'silgi', 'açkı'}
set_son = {"elma", "muz", "kiraz"}
set_son.update(["portakal", "mango", "üzüm"])
print(set_son) #çıktı: {'muz', 'elma', 'üzüm', 'kiraz', 'portakal', 'mango'}
Python’da Kümeler Nasıl Birleştirilir?
Python’da kümeleri birleştirmek mümkündür. Bu işlemleri gerçekleştirmek için aşağıdaki yöntemlerden birini kullanabilirsiniz:
1. union() metodu veya |
operatörü: İki set’in birleşimini döndürür. Ancak orijinal kümeleri değiştirmez.
#union() metodu kullanımı:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
birlesik_set = set1.union(set2)
print(birlesik_set)
# Çıktı: {1, 2, 3, 4, 5}
# | işareti kullanımı:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
birlesik_set = set1 | set2
print(birlesik_set)
# Çıktı: {1, 2, 3, 4, 5}
2. update() metodu veya |=
işareti: İlk kümeyi, diğer küme ile birleştirerek günceller.
#update() metodu kullanımı:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set1.update(set2)
print(set1)
# Çıktı: {1, 2, 3, 4, 5}
#|= işareti kullanımı:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set1 |= set2
print(set1)
# Çıktı: {1, 2, 3, 4, 5}
Bu yöntemlerle kümeleri birleştirebilirsiniz. Ancak, kümeler benzersiz elemanlara sahip olduğu için birleştirme işlemi sonucunda tekrar eden elemanlardan sadece bir tane yer alır.
Python “Set” Metotları
Metot | Görevi |
---|---|
add() | Kümeye bir eleman ekler |
fruits = {“apple”, “banana”, “cherry”} fruits.add(“orange”) print(fruits) #Çıktı: {‘banana’, ‘apple’, ‘cherry’, ‘orange’} | |
clear() | Kümedeki tüm öğeleri siler |
fruits = {“apple”, “banana”, “cherry”} fruits.clear() print(fruits) #Çıktı: set() | |
copy() | Kümenin bir kopyasını döndürür |
fruits = {“apple”, “banana”, “cherry”} x = fruits.copy() print(x) #Çıktı: {‘banana’, ‘cherry’, ‘apple’} | |
difference() | İki veya daha fazla küme arasındaki farkı içeren bir küme döndürür |
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} #set1’de olup set2’de olmayan elemanlar fark = set1.difference(set2) print(fark) # Çıktı: {1, 2} | |
difference_update() | İki küme arasındaki farkı bulur ve sonucu mevcut kümeyi güncelleyerek geri döndürür. |
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} #set1’i, set2 ile karşılaştırarak güncelliyoruz set1.difference_update(set2) print(set1) # Çıktı: {1, 2} | |
discard() | Belirtilen elemanı kaldırır |
fruits = {“apple”, “banana”, “cherry”} fruits.discard(“banana”) print(fruits) #Çıktı: {‘apple’, ‘cherry’} | |
intersection() | Kümelerin kesişimi olan bir küme döndürür |
#İki sayı kümesi set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} ortak_elemanlar = set1.intersection(set2) print(ortak_elemanlar) # Çıktı: {3, 4} | |
intersection_update() | İki veya daha fazla küme arasındaki ortak elemanları bulur ve bu ortak elemanlarla mevcut kümeyi günceller. |
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} #set1’i, set2 ile kesişen elemanlarla güncelliyoruz set1.intersection_update(set2) print(set1) # Çıktı: {3, 4} | |
isdisjoint() | İki kümenin kesişimi olup olmadığını döndürür |
set1 = {1, 2, 3} set2 = {4, 5, 6} sonuc = set1.isdisjoint(set2) print(sonuc) # Çıktı: True (Çünkü iki küme arasında ortak eleman yok) | |
issubset() | Bir kümenin, başka bir kümenin alt kümesi (subset) olup olmadığını kontrol eder. |
set1 = {1, 2, 3} set2 = {1, 2, 3, 4, 5} #set1’in set2’nin alt kümesi olup olmadığını kontrol ediyoruz sonuc = set1.issubset(set2) print(sonuc) # Çıktı: True (set1’in tüm elemanları set2’de mevcut) | |
issuperset() | Bir kümenin, başka bir kümenin üst kümesi (superset) olup olmadığını kontrol eder. |
set1 = {1, 2, 3, 4, 5} set2 = {1, 2, 3} #set1’in set2’nin üst kümesi olup olmadığını kontrol ediyoruz sonuc = set1.issuperset(set2) print(sonuc) # Çıktı: True (set1, set2’nin tüm elemanlarını içeriyor) | |
pop() | Bir kümeden rastgele bir elemanı kaldırır ve bu elemanı döner. Kümeler sırasız veri yapıları olduğu için, hangi elemanın çıkarılacağını tahmin edemezsiniz. Eğer küme boşsa, KeyError hatası verir. |
my_set = {1, 2, 3, 4, 5} #Rastgele bir öğe kaldırılıyor ve döndürülüyor eleman = my_set.pop() print(f”Kaldırılan eleman: {eleman}”) # Çıktı: (örneğin) Kaldırılan eleman: 1 print(f”Kalan küme: {my_set}”) # Çıktı: (örneğin) Kalan küme: {2, 3, 4, 5} | |
remove() | Kümeden belirtilen bir öğeyi kaldırır. Eğer kaldırmak istediğiniz öğe kümede bulunmazsa, KeyError hatası verir. Bu yüzden, kaldırılacak öğenin kümede bulunduğundan emin olmanız gerekir. |
my_set = {1, 2, 3, 4, 5} #3 elemanını kümeden kaldırıyoruz my_set.remove(3) print(f”Kalan küme: {my_set}”) # Çıktı: {1, 2, 4, 5} | |
union() | İki veya daha fazla kümenin birleşimini döner. Birleşim, tüm kümelerdeki elemanların bir araya getirilerek yeni bir küme oluşturulmasıdır. Bu metot, her elemandan yalnızca bir kopya alır, yani tekrarlanan elemanları otomatik olarak kaldırır. |
set1 = {1, 2, 3} set2 = {3, 4, 5} #set1 ve set2’nin birleşimini buluyoruz birlesim = set1.union(set2) print(birlesim) # Çıktı: {1, 2, 3, 4, 5} | |
update() | Bir kümenin üzerine başka bir kümenin (veya herhangi bir iterable yapının) elemanlarını ekleyerek kümeyi günceller. |
set1 = {1, 2, 3} set2 = {3, 4, 5} #set1’i set2’nin elemanları ile güncelliyoruz set1.update(set2) print(set1) # Çıktı: {1, 2, 3, 4, 5} |
“Set” – “List” – “Tuple” Arasındaki Farklar
Özellik | List | Tuple | Set |
---|---|---|---|
Bildirim | [ ] | ( ) | { } |
Sıralı | Evet | Evet | Hayır |
Değiştirilebilir | Evet | Hayır | Evet (ama set içindeki tek bir elemanı doğrudan değiştiremezsiniz) |
Eleman Tekrarı | Evet | Evet | Hayır |
Index Erişimi | Evet | Evet | Hayır |