Skip to content

Latest commit

 

History

History
982 lines (396 loc) · 6.66 KB

File metadata and controls

982 lines (396 loc) · 6.66 KB

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ı.

  • Dictionaryler 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 mutabledı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}

Setten 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 hata 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 geldil ş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}

difference1.png

# '-' 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}

difference2.png

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

sym_difference.png

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)

intersection.png

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 (Birlerşim)

union1.png

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}