Focus mode

Python Temel

Set

Set


  • Setleri kümeler olarak düşünebiliriz.


  • Sadece özgün değerleri tutan, içerisinde bir eleman var mı yok mu, başka bir setle hangi elemanları farklı gibi işlemleri performanslı bir şekilde yapabileceğimiz bir veri yapısıdır.


  • Dictionary'ler gibi eleman sorgusu yapmak hızlıdır. Dictionarylerde key-value çift olarak bulunduğu için aynı uzunluktaki bir setten daha fazla yer kaplar.


  • Setler indexlenemez.


  • Setler mutable'dır.


Set yaratma


s = {1,2,3,4,5}


s


{1, 2, 3, 4, 5}


s2 = {1,2,2,2,1,4,5,6}


s2


{1, 2, 4, 5, 6}


  • Boş set yaratma:


a = {}


type(a)


dict


s = set()


s


set()


l = [1,2,3,4]


s = set(l)


s


{1, 2, 3, 4}


l = [1,2,3,4,1,2]


set(l)


{1, 2, 3, 4}


# Boş bir seti {} ile yaratamayız,çünkü bu boş bir dictionary yaratmak için ayrılmış
s = {}

type(s)


Setler Sadece Özgün Değerlerden Oluşur


  • Setin içinde bir elemanı birden çok göremezsiniz.


l = [1,2,3,4,1,2]


# Sadece farklı değerlerden `s` yi oluşturacak.
s = set(l)


s


t = (1,2,3,4,1)


s = set(t)


s


{1, 2, 3, 4}


message = "Merhaba, orda mısın?"


# Strinleri kullanarak da set oluşturabiliriz.
s = set(message)


# " " (boşluk) karakterini de sayıyor.
# setler sıralı değildir.
s


{' ', ',', '?', 'M', 'a', 'b', 'd', 'e', 'h', 'm', 'n', 'o', 'r', 's', 'ı'}


len()


s = set([1,2,3,4,5])


s


{1, 2, 3, 4, 5}


len(s)


5


t = (1,2,3,3,2)


set(t)


{1, 2, 3}


len(set(t))


3


Setler Indexlenemez


s


{1, 2, 3, 4, 5}


s[0]


---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-61-c9c96910e542> in <module>
----> 1 s[0]


TypeError: 'set' object is not subscriptable


Set'e Eleman Ekleme


s = {1, 2, 3, 4, 5}


s.add(6)


s


{1, 2, 3, 4, 5, 6}


# Bu kod bir error vermeyecek, ama 5 zaten sette olduğu için eklemeyecek de
s.add(5)


s


{1, 2, 3, 4, 5, 6}


Set'ten Eleman Silmek


s


{1, 2, 3, 4, 5, 6}


s.remove(2)


s


{1, 3, 4, 5, 6}


# add()'in aksine, remove() hata veriyor.
s.remove(9)


---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

<ipython-input-70-6bd3b47dfec1> in <module>
      1 # add()'in aksine, remove() hata veriyor.
----> 2 s.remove(9)


KeyError: 9


s


{1, 3, 4, 5, 6}


# Eğer silmek istediğimiz eleman yoksa hata almak istemiyorsak, discard()'ı kullanabiliriz.
s.discard(10)


s


{1, 3, 4, 5, 6}


s.add(10)


s


{1, 3, 4, 5, 6, 10}


s.discard(10)


s


{1, 3, 4, 5, 6}


Difference (fark)


  • Evet geldik şimdi kümelerdeki fark konusuna. s1 kümesi ile s2 kümesinin farkına bakacağız. (s1 – s2) veya (s1 \ s2)


s1 = set([1,5,10])


s2 = set([2,5,3])


# s1 in hangi elemanları s2 den farklıdır.
s1.difference(s2)


{1, 10}


# '-' operatörü setlerde kullanıldığında bize farkı verir.
s1 - s2


{1, 10}


# s2 nin hangi elemanları s1 den farklıdır
s2.difference(s1)


{2, 3}


s2 - s1


{2, 3}



Symmetric Difference


  • s1'in s2 den farkı ile s2'nin s1 den farkının birleşimi. (s1 \ s2) U (s2 \ s1) - > s1 U s2 - (s1 n s2)


U -> Birleşim

n -> kesişim


s1


{1, 5, 10}


s2


{2, 3, 5}


# (s1 \ s2) U (s2 \ s1)  - > A U B - (A n B)
s1.symmetric_difference(s2)


{1, 2, 3, 10}


# (s2 \ s1) U (s1 \ s2) same as (s1 \ s2) U (s2 \ s1)
s2.symmetric_difference(s1)


{1, 2, 3, 10}


Intersection (kesişim)


s1


{1, 5, 10}


s2


{2, 3, 5}


s1.intersection(s2)


{5}


s2.intersection(s1)


{5}


# `&` operatörü setlere uygulanınca kesişim olur
s1 & s2


{5}


# Bu işlem kesişim ile aynı sonucu verecek
s1 - (s1-s2)


{5}


s1


{1, 5, 10}


# kesişim yapıp s1 in değerini buna günceller
s1.intersection_update(s2) # s1 = s1.intersection(s2)


s1


{5}


Union (Birleşim)


s1 = set([1, 5, 10])


s1


{1, 5, 10}


s2


{2, 3, 5}


s1.union(s2)


{1, 2, 3, 5, 10}


s1


{1, 5, 10}


s1.union(s1)


{1, 5, 10}


Disjoint Sets

  • s1 ∩ s2 = Ø olup olmadığını kontrol eder
s1


{1, 5, 10}


s2


{2, 3, 5}


s3 = set([12,11])


s3


{11, 12}


# s1 ∩ s2 ≠  Ø(boş küme) değil, o yüzden False döner
s1.isdisjoint(s2) 


False


s2.isdisjoint(s1) 


False


s1.isdisjoint(s3) 


True


len(s1.intersection(s2)) == 0


False


Subset (Alt küme)

  • s1.issubset(s2), s1'in s2'nin alt kümesi olup olmadığını kontrol eder
s1


{1, 5, 10}


s2


{2, 3, 5}


s1.issubset(s2)


False


s3 = set([2,5])


s3


{2, 5}


s3.issubset(s2)


True


Superset (üst küme)

  • s2.issuperset(s3) s2'nin s3'ün üst kümesi olup olmadığını sorgular
s1


{1, 5, 10}


s2


{2, 3, 5}


s3


{2, 5}


s2.issuperset(s3)


True


s2


{2, 3, 5}

Test

Comments

You need to enroll in the course to be able to comment!