python dersleri

Python Set( Küme) ve Frozenset (Kısıtlanmış Küme)

Merhaba Arkadaşlar,
Mobilhenem.com da yine bir dersle birlikteyiz Python Dersleri serisinin bu dersinde Set(Küme) ve Frozenset(Dondurulmuş Küme) ve Metotlarını işleyeceğim keyifli okumalar.

Set(Küme) ve Frozenset(Kısıtlanmış Küme) Nedir

Arkadaşlar daha önceki Veri Türleri dersimizde Python da veri türlerini mutable(Değiştirilebilir) ve immutable(değiştirilemez) olarak ikiye ayırmıştık burada ise hem değiştirilebilir hem değiştirilemez veri türünü işleyeceğiz.

Set(Küme) Nedir ?

Liste, sözlük ve demet veri türü gibi birden çok veri türünü birlikte barındıran veri tipidir. Kümeler ile ilgili yaptığınız her türlü işlevi(birleşme,kesişim vs.) bu veri tipi ile yapabilirsiniz.

Set(Küme) Kullanımı

Hemen bir örnekle küme kullanımını göstereyim;

kume= {"Python",'c',4,"Cahit"}

Oldukça  basit bir kullanımı var ama burada dikkat etmemiz gereken bir şey var eğer boş küme tanımlarsak              şu şekilde ;

kume={}

yorumlayıcı bunu Sözlük olarak algılayacaktır. Peki nasıl boş küme oluşturacağız derseniz onu da göstereyim;

kume = set()

şeklinde tanımlıyoruz.
Kümeler hakkında önemli bir not daha vereyim o da şu : burada gördüğümüz kümelere matematikte gördüğümüz kümelere olduğu gibi bir elemandan sadece bir tane olabilir. Peki biz eklemeye çalışırsak ne olur görelim;

kume= {"Python",'c',4,"Cahit","Python"}

print(kume)
{'Python', 'c', 4, 'Cahit'}

Şimdi siz diyeceksiniz tamam da ekledik hata vermedi sadece gösterirken aynı olandan bir tane tek gösteriyor derseniz hemen size şu şekilde göstereyim.

kume= {"Python",'c',4,"Cahit","Python"}
print(len(kume))
4

Gördüğünüz gibi kümenin uzunluğuna baktığımızda küme 5 eleman eklememize rağmen 4 eleman görüyor bu önemli notu da verdiğimize göre Set(Küme)’nin elemanlarına nasıl erişiriz onun göstereyim.

Set(Küme) Öğelerine Erişim

kume= {"Python",'c',4,"Cahit","Python"}
print(kume[3])

TypeError: 'set' object does not support indexing

Bu şekilde bir hata aldık sebebi ise şu Set(Küme) aynı Sözlükler gibi sıralı veri tipi değildir. Bu yüzden indexleme desteklemez. Siz şimdi diyeceksiniz ki peki neden kümeleri kullanayım ki doğrudur kümeler tek başına gereksiz görünse de birden fazla küme olduğu zaman çokça ihtiyacınız olacaktır o zaman kümelerin ne kadar gerekli olduğunu göreceksiniz. Onun için hemen Set(Küme) Metotlarına geçiyorum.
Küme metotlarını her derste olduğu gibi dir() fonksiyonu ile gösterelim.

Set(Küme) Metotları

['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__',
 '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
 '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', 
'__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__',
 '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__',
 '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__',
 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 
'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset',
 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union',
 'update']

Biz bu derste diğer derslerde olduğu gibi __X__ şeklinde olan metotlara yani özel metotlara girmeyeceğiz.

['add', 'clear', 'copy', 'difference', 'difference_update', 'discard',
 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset',
 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union',
 'update']

Add Metodu :

Bu metot Kümeye eleman öğe eklememizi sağlayan metottur;

kume ={1,2,3,4,5}
kume.add(6)
print(kume)
{1, 2, 3, 4, 5, 6}

Clear Metodu:

Bu metot ise kümeyi temizlemeye yarayan ve metodun boş değerini döndürür.

kume ={1,2,3,4,5,6}
kume.clear()
print(kume)
set()

Copy Metodu:

Bu metot kümeyi kopyalamamıza yarayan metot dur. Bir kümeyi kopyalamadan da başka bir değişkene atayabiliriz ama biz bir küme üzerinde değiştirme işlemi yaptığımızda diğer küme de değişiyor bu yüzden copy() metodunu kullanıyoruz.

kume ={1,2,3,4,5,6}
kume_yedek =set()
kume_yedek=kume.copy()
print(kume_yedek)
{1, 2, 3, 4, 5, 6}

Update Metodu

Bu metot kümeyi yenilememizi sağlıyor.

kume ={1,2,3,4,5,6}
kume_2={7,8,9,10}
kume.update(kume_2)
print(kume)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

Remove Metodu

Bu metot kümeden eleman silmeye yarayan metot dur.

kume ={1,2,3,4,5,6}
kume.remove(4)
print(kume)
{1, 2, 3, 5, 6}

Eğer silmek istediğimiz eleman küme içinde bulunmuyorsa bize şu hatayı verir;

kume ={1,2,3,4,5,6}
kume.remove(8)
print(kume)

kume.remove(8)

KeyError: 8

Discard Metodu

Bu metot da remove() metodu gibi kümede istenilen elemanı silme yarıyor ama bu silmek istenilen eleman eğer kümenin içinde yoksa hata vermez.

kume ={1,2,3,4,5,6}
kume.discard(8)
print(kume)
{1, 2, 3, 4, 5, 6}

Pop Metodu

Bu metot da kümenin ilk elemanını silmeye yarayan metotdur.

kume ={1,2,3,4,5,6}
kume.pop()
print(kume)
{2,3,4,5,6}

Bir küme üzerinde çeşitli işlemler yapmak için bazı metotları gördük fark ettiyseniz bu metotları daha önce liste,demet ve sözlük veri türlerini işlerken de görmüştük.
Şimdi işleyeceğiz metotlar birden fazla küme üzerinde işlemler yapmak için kullanılır bu metotlar ile neden kümeler sorusuna da cevap verebileceksiniz 🙂

İlk önce kümeleri oluşturalım;

A = {1,2,3,4,9}
B = {3,4,5,6,10}
C = {4,7,8,9,10}

Union Metodu

İki kümenin kümenin birleşmesini sağlayan metottur.

A = {1,2,3,4,9}
B = {3,4,5,6,10}
C = {4,7,8,9,10}

print(A.union(B))
{1, 2, 3, 4, 5, 6, 9, 10}
AUB

Bu şekilde iki kümeyi birleştirmeyi yaptık fark ettiyseniz her iki kümede de 4 ve 5 elemanları olmasına rağmen sadece bir defa yazdı.
İsterseniz şimdi üç kümenin birleşimini yapalım yapalım.

print(A.union(B.union(C)))
AUBUC

Intersection Metodu

Bu metot iki kümenin kesişimini veren metottur.

print(A.intersection(C))
{9, 4}

İsterseniz üç kümenin kesişimini alalım.

print(A.intersection(B.intersection(C)))
{4}

Intersection_update Metodu

Bu metot da intersection metodu gibi iki metodun kesişimini alır ve güncelleme işlemini yapar.

A.intersection_update(C)
print(A)

{9, 4}

Isdisjoint Metodu

Bu metot iki kümenin kesişimin boş olup olmadığını kontrol eden metotdur. Sonuca göre True veya False değer döndürür.

A = {1,2,3,4,9}
C = {4,7,8,9,10}
False

False değer döndürdü çünkü iki kümenin kesişimi boş değil 4 ve 9 elamanı var. Eğer iki elamanı silersek True değer verecektir.

A = {1,2,3,}
C = {4,7,8,9,10}

True

Difference Metodu

Bu metot ise iki arasındaki farkı bulmaya yarayan metotdur.

print(A.difference(B))
{1, 2, 9}

Differnce_uptdate Metodu

Bu metot hem iki küme arasındaki farkı bulur hemde kümeyi günceller:

A = {1,2,3,4,9}
B = {3,4,5,6,10}
C = {4,7,8,9,10}

A.difference_update(B)
print(A)

{1, 2, 9}

A kümesin yeni hali bu şekilde olur.

Issubset Metodu

Bu metot ise bir kümenin başka bir kümenin alt kümesi olup olmadığını sorgulayan metotdur.

A = {1,2,5,8,9,12}
B = {1,2,5}

print(B.issubset(A))

True

Biz burada B kümesi A kümesinin Alt kümesi mi şeklinde bir sorgu yapmış olduk.

Issuperset Metodu

Bu metot da issubset metodunu  tersini yapıyor. Bize bir kümenin başka bir kümeyi kapsayıp kapsamadığını sorgulayan metottur.

A = {1,2,5,8,9,12}
B = {1,2,5}
print(A.issuperset(B))

True

A kümesi B kümesini kapsar dedik True değeri aldık çünkü B kümesi A kümesinin alt kümesidir bu yüzden True sonucu aldık aynı şekilde B kümesi için yaparsak False değerini verecektir.

Frozenset(Kısıtlanmış Küme)

Arkadaşlar biraz önce set(küme) veri türünü gördük bu frozenset veri tipi de set veri turunun kısıtlanmış halidir. Peki neden kısıtlanış onu size açıklayayım biz Python da veri tiplerini mutable(değiştirilebilir) ve  immutable(değiştirilmez) olarak ayırmıştık işte bu veri tipide immutable(değiştirilemez) veri tipi dir. o yüzden kısıtlanmış küme diyoruz biz bu veri türüne ekleme, silme, değiştirme vb. işlemler yapamıyoruz. Set veri türünün kısıtlanmış hali hemen bir örnekle kullanımını göstereyim;

kisitli_kume = frozenset(["Python",3.14,5,'A'])
print(kisitli_kume)

frozenset({5, 3.14, 'Python', 'A'})

Peki biz bu veri tipi üzerinde değişiklik yapmaya çalışırsak ne olur? Mesela eleman bir elemanı silmeye çalışalım;

kisitli_kume.remove("Python")

kisitli_kume.remove("Python")
AttributeError: 'frozenset' object has no attribute 'remove'

Görüldüğü gibi hata aldık ki zaten öyle bir metodu yok sadece silme için değil değişiklik türünde(ekleme,güncelleme) gibi hiçbir metodu yok isterseniz var olan metotları yazdıralım:

['copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset',
 'symmetric_difference', 'union']

Gördüğünüz gibi sınırlı sayıda metodu var isterseniz veri türünü de ekrana  yazalım.

print(type(kisitli_kume))
<class 'frozenset'>

Bu veri tipi de bu şekilde.

Mobilhanem.com da  Python dersleri serisinin bir dersin daha sonuna geldik anlamadığınız yerler  veya eksik yada yanlışlar için çekinmeden iletişime geçebilirsiniz. Bir sonra ki dersimizde Python da Karakter Dizilerini ve Metotlarını göreceğiz. Bir sonraki yazıda görüşmek üzere.

Tüm Python dersleri için tıklayın

257

Cahit İşleyen

Data Scientist at @Embedica.ai
Python ve Linux sever.
Çay tiryakisi

3 Yorum

  • Arkadaşlar biri bana frozenset(kısıtlanmış kümelerin) nerede kullanıldığını, ne amaçla kullanılabileceğini açıklayabilir mi? Frozenset kümeler yerine ondan çok daha kapsamlı olan normal setleri kullanabiliriz?

  • Çok teşekkür ederim bu site baya bir bilgi kattı bana, yazılımda yeniyim ve çok beyin yakıyor bu konu çok güzeldi matematiği sevdiğim için zorlanmadım

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?