Bir başka Python Veri Koleksiyonu da Kümeler(Sets)dir. Kümeler; sıra numarasına sahip olmayan, indekslenmemiş, içindeki veriler değiştirilemeyen ve her verinin küme içinde yalnızca bir kez bulunabildiği tekrar etmeyen veri koleksiyonlarıdır.

Kümelerde veriler köşeli parantezler arasında yazılırlar.

personelListesi = {"Oben Seven", "Aykut Demir", "Mert Bozok"}
print(personelListesi)

Çıktı:

{'Mert Bozok', 'Oben Seven', 'Aykut Demir'}

Kümeler sıralanmamış oldukları için küme içindeki verilerin nerede bulunduğunu bilmeniz mümkün değildir. Kümeleri her kullandığınızda veriler farklı bir sırada yer alabilir ve bir sıra numarası ya da anahtar(key) ile ulaşamazsınız.

Verilerin sıra numarası olmadığı için index() metodu ile verinin konumunu öğrenemezsiniz. Ya da her veri sadece bir kez küme de yer aldığı için count() metoduyla verinin kaç kez tekrarlandığını öğrenemezsiniz. Bu iki method kümelerde yoktur.

Kümeler de listeler gibi;

  • İçerisinde her tür veriyi karışık olarak bulundurabilir, ancak diğer koleksiyonlardan sadece demetleri içinde barındırır.
  • İçinde kaç veri yer aldığını öğrenmek için len() metodunu kullanabilirsiniz
  • Yeni bir küme oluşturmak için set() fonksiyonu da kullanılabilir.
yeniListe = set(("Python", "Javascript", "PHP"))
print(yeniListe)

Çıktı:

{'Python', 'PHP', 'Javascript'}

 

Kümeler, düzenli bir sıralamaya ya da sıra numarasına sahip olmadığı için içinde yer alan verilere sıra numarası ile ulaşamayacağınızı söylemiştik ama for..in döngüsüyle tüm verilere ulaşabilirsiniz.

for x in yeniListe:
  print(x)

Çıktı:

Javascript
PHP
Python

 

Belirli bir verinin küme içinde yer alıp almadığını öğrenmek için de listelerde olduğu gibi if … in ifadesini kullanabiliriz;

webProgramlama = set(("Python", "Javascript", "PHP", "HTML", "CSS", "SQL"))
if "Python" in webProgramlama:
    print(
        "Evet. Python web programlama için de kullanılan bir yazılım dilidir.")

Çıktı:

Evet. Python web programlama için de kullanılan bir yazılım dilidir.

Küme oluşturulduktan sonra içindeki verileri değiştirmeniz mümkün değildir ama yeni veri ekleyebilirsiniz. Kümelere yeni veri eklemek için add() metodu kullanılır;

webProgramlama.add("VueJS")
print(webProgramlama)

Çıktı:

{'CSS', 'PHP', 'HTML', 'Python', 'SQL', 'VueJS', 'Javascript'}

Kümeye bir başka kümenin verilerini eklemek için update() metodu kullanılır;

mobilProgramlama={"Swift","Kotlin","React Native"}
webProgramlama.update(mobilProgramlama)
print(webProgramlama)

Çıktı:

{'HTML', 'Swift', 'Kotlin', 'CSS', 'React Native', 'VueJS', 'PHP', 'Python', 'SQL', 'Javascript'}

Bu metod ile verileri eklenen veri koleksiyonunun da bir küme olması şart değildir. İsterseniz update() metodu ile kümelere listeler, demetler ve sözlükler ekleyebilirsiniz. Tabii sonuç veri koleksiyonu yine  küme olur.

Kümelerden belirli bir veriyi silmek için remove() metodunu, küme içeriğini boşaltmek için clear() metodunu, kümeyi tamamen ortadan kaldırmak için del anahtar kelimesini kullanabilirsiniz.

Belirli bir veriyi silmek için discard() metodu da kullanılabilir. Aralarındaki fark ise, remove() metodunda silmek istediğiniz veri küme de yoksa bir hata döndürür ama discard() metodunda hata döndürmez. Eğer uygulamanızın hata vermeden çalışmaya devam etmesini istiyorsanız discard() metodunu kullanabilirsiniz ama bu durumda silmek istediğiniz veri kümede yer almadığında herhangi bir uyarı almayacağınız için bu durumu kontrol etmenizi sağlayacak kodlar eklemelisiniz.

Ayrıca kümenin son verisini silmek için listelerde olduğu gibi pop() meodunu da kullanabilirsiniz ama kümelerde son sırada hangi veri olduğu bilinmediği için kör atış olur, hangi veriyi sildiğinizi bilmezsiniz. Gerçi pop() metodu size hangi veriyi sildiğini söyler ama bu metod ile kümelerde hedeflediğiniz veriyi silemezsiniz.

Kümeleri birleştirmek için daha önce bahsettiğimiz update() metodunun yanı sıra union() metodunu da kullanabilirsiniz. Aralarındaki fark update() metodu ile bir kümeye diğer kümenin verilerini eklerken, union() metodu ile iki kümenin verilerinden oluşan üçüncü bir küme oluşturmanızdır. Eğer her iki küme ortak veriler içeriyorlarsa otomatik olarak tekrar eden veri silinir.

jsCerceveleri={"React", "Angular","VueJS"}
programlamaDilleri=webProgramlama.union(jsCerceveleri)
print(programlamaDilleri)

Çıktı:

{'Python', 'Kotlin', 'CSS', 'Angular', 'SQL', 'React Native', 'React', 'Javascript', 'PHP', 'VueJS', 'HTML', 'Swift'}

 

Üzerinde çalıştığınız iki kümede ortak veriler olup olmadığını kontrol etmek için isdisjoint() metodunu kullanabilirsiniz. Eğer kümeler arasında ortak veriler yok ise true, ortak veriler mevcut ise false cevabını döndürür;

diller1={"HTML","CSS","Javascript","PHP","Python"}
diller2={"HTML","Python","Flask"}
print(diller1.isdisjoint(diller2))

Çıktı:

False

 

İki kümede ortak veriler olduğunu tespit ettiğinize göre, her iki kümede ortak olan verileri merak ediyorsanız bunu bulmanız için de intersection() metodu mevcuttur. Bu metod her iki kümede ortak olan verilerden yeni bir küme oluşturur.

diller1={"HTML","CSS","Javascript","PHP","Python"}
diller2={"HTML","Python","Flask"}
ortakDiller=diller1.intersection(diller2)
print(ortakDiller)

Çıktı:

{'HTML', 'Python'}

Eğer yeni bir küme oluşturmak yerine ortak veriler ile ilk kümeyi yeniden oluşturmak isterseniz intersection_update() metodunu kullanabilirsiniz;

diller1.intersection_update(diller2)
print(diller1)

Çıktı:

{'HTML', 'Python'}

 

Eğer kümelerde ortak olan verileri değil de ortak olmayan verileri bulmak istiyorsanız symmetric_difference() metodunu kullanabilirsiniz. Bu method iki kümede ortak olmayan verilerden yeni bir küme oluşturur.

diller3={"HTML","CSS","Javascript","PHP","Python"}
diller4={"HTML","Python","Flask"}
farkliOlanlar=diller3.symmetric_difference(diller4)
print(farkliOlanlar)

Çıktı:

{'Javascript', 'Flask', 'CSS', 'PHP'}

Ortak olmayan verilerden yeni bir küme oluşturmak yerine, iki kümedeki ortak olan verileri çıkartıp, ortak olmayanları ekleyerek birinci küme içinde birleştirmek isterseniz symmetric_difference_update() metodunu kullanabilirsiniz.

diller3.symmetric_difference_update(diller4)
print(diller3)

Çıktı:

{'Flask', 'PHP', 'CSS', 'Javascript'}

Her iki metod için de sonuçlar aynı olur fakat symmetric_difference() metodunda işlem sonuçlarından yeni bir küme oluşturulurken,  symmetric_difference_update() metodunda işlem sonuçları ilk kümenin içinde yer alır.

 

Bir küme içindeki verilerden diğer kümede olan verileri çıkartmak için “-” operatörünü ya da difference() metodunu kullanabilirsiniz;

diller5={"HTML","CSS","Javascript","PHP","Python"}
diller6={"HTML","Python","Flask"}
print(diller5-diller6)
farkliDiller=diller5.difference(diller6)
print(farkliDiller)

Çıktı:

{'PHP', 'Javascript', 'CSS'}
{'PHP', 'Javascript', 'CSS'}

Önceki örneklere benzer şekilde yeni bir küme oluşturmadan ilk kümeden ikinci kümenin verilerini çıkartıp ilk küme içinde depolamak için difference_update() metodunu kullanabilirsiniz.

diller5.difference_update(diller6)
print(diller5)

Çıktı:

{'PHP', 'Javascript', 'CSS'}

 

Kümeler ile ilgili bir başka kavram da alt küme kavramıdır. Matematik derslerinizden de hatırlayacağınız gibi bir kümenin içindeki verilerin hepsi diğer bir kümede mevcutsa buna diğer kümenin alt kümesidir diyoruz. Python’da bir kümenin diğerinin alt kümesi olup olmadığını öğrenmek için issubset() metodunu kullanırız, eğer alt kümesi ise true değerini döndürür. Benzer şekilde, bir kümenin diğerinin tüm verilerini içeren bir üst kümesi olup olmadığını sorgulamak için de issuperset() metodunu kullanırız. Eğer verileri kapsayan üst kümesi ise true değerini döndürür;

kume1={'CSS', 'Javascript', 'HTML', 'PHP', 'VueJS', 'SQL', 'Python'}
kume2={'Python', 'PHP', 'Javascript'}
print(kume2.issubset(kume1))
print(kume1.issuperset(kume2))

Çıktı:

True
True

 

Kümeler ile ilgili bu sayfada yer alan ve listeler ile aynı özellikleri taşıdığı için tekrara düşmemek adına yazılmamış olan tüm örneklere şuradan ulaşabilirsiniz;

https://repl.it/@ObenSEVEN/kumeler