• Web sitemizin içeriğine ve tüm hizmetlerimize erişim sağlamak için Web sitemize kayıt olmalı ya da giriş yapmalısınız. Web sitemize üye olmak tamamen ücretsizdir.
  • Sohbetokey.com ile canlı okey oynamaya ne dersin? Hem sohbet et, hem mobil okey oyna!
  • Soru mu? Sorun mu? ''Bir Sorum Var?'' sistemimiz aktiftir. Paylaşın beraber çözüm üretelim.

Python KÜMELER

LeGoLaS

Onursal Üye
Üyelik Tarihi
1 Ağu 2008
Konular
4,885
Mesajlar
16,461
MFC Puanı
15,790
KÜMELER





Kümeler ,Python da veri tiplerinin sonuncusudur.Python’da kümenin İngilizcesi olan set kullanılır. Matematikte kümeler için geçerli olan herşey , Python'da da setler için geçerlidir. Setler kesişim,birleşim,fark gibi tüm özellikleri barındırır.Set'lerde ekleme, çıkarma işlemlerini yapabildiğimiz için metot bakımından da zengindir.






Küme Oluşturmak




[COLOR=white !important]?
1
2
bos_kume=() #Burada boş bir küme oluşturduk .
Küme=set(["roman","öykü","hikaye","deneme"]) #Burada kümemizin içine elemanlarımızı atadık.


Örnekte gördüğümüz gibi aslında biz set’in içinde bir liste tanımadık. Peki şöyle yapmayı denesek:
[COLOR=white !important]?[/COLOR]​
1
liste=[“roman” , “öykü”, ”hikaye”, ”deneme”]


diye bir liste tanımlasak ve
[COLOR=white !important]?[/COLOR]​
1
2
Küme=set(liste)
set(['roman', 'oyku', 'deneme', 'hikaye '])


Küme=set(liste) dediğimizde çıktımızın; set(['roman', 'oyku', 'deneme', 'hikaye ']) gibi olacağını gördük. Bunu bir de demetlerle yapmayı deneyip ne gibi bir sonuç alacağımıza bakalım.
[COLOR=white !important]?[/COLOR]​
1
2
demet=("roman","oyku","hikaye","deneme")
set(demet)


yazdığımızda çıktımızın ,
[COLOR=white !important]?[/COLOR]​
1
set(['roman', 'oyku', 'hikaye', 'deneme'])


olması gerekiyor. Fark edersek ekran çıktımız , bizim demette ve listede yazdığımız sıra ile karşımıza çıkmadı. Bunun nedeni ne olabilir? Bunun nedeni Kümelerinde sözlükler gibi sırasız veri tipleri olmasıdır. Kümeler sırasız bir veri tipi olduğu için ögelerimize sırası ile erişim yapamayız. Karakter dizisini set içinde kullanmak istersek nasıl bir küme oluşturacağımızı görelim:
[COLOR=white !important]?[/COLOR]​
1
2
3
kar_diz = "Pythonda kumeler kullanisli bir veri tipidir."
set(kar_diz)
set(['a', ' ', 'b', 'e', 'd', 'p', 'i', 'h', 'k', 'm', 'l', 'o', 'n', 'P', 's', 'r', 'u', 't', 'v', 'y', '.'])


Burada bir şey dikkatinizi çekti mi? Evet biz karakter dizisi içinde yazdığımız cümlede tekrar eden harfler var ama set bunları sadece 1 kere yazdırmış. Örneğin “kullanıslı” kelimesinde 3 tane l var ama sadece 1 tane yazdırılmış. Bu set’lerin en önemli özelliklerindendir. Nedir bu özellik ? Kümeler içinde bulunan aynı ögeyi , birden fazla tekrar etmez. Kümenin içinde neyden ne kadar olduğunu nasıl bileceğiz? Bu sorunu daha önce öğrendiğimiz “count ” metodu ile çözebiliriz.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
liste=["roman", "oyku" , "hikaye" , "deneme" , "roman" , "hikaye","roman"]
set(liste)
set(['roman', 'oyku', 'hikaye', 'deneme'])
for i in set(liste):
print "%s listede %s kez geciyor." %(i,liste.count(i))


şeklinde yazarsak çıktımızın
[COLOR=white !important]?[/COLOR]​
1
2
3
4
roman listede 3 kez geciyor.
oyku listede 1 kez geciyor.
hikaye listede 2 kez geciyor.
deneme listede 1 kez geciyor.


yukarıdaki gibi olduğunu görürüz.
Kümenin Metotlari

Kümenin metotlarını öğrenmek için; dir(set) yazarak , metotlarımızı görüyoruz. Bunlardan kenarlarında çizgi olmayanlar setlerin metotlarıdır.

clear
add
copy
difference
difference_update
discard
intersection
intersection_update
isdisjoint
issubset
issuperset
pop
remove
symmetric_difference
symmetric_difference_update
union update
İsterseniz işimize yarayanlardan başlayalım.
clear() metodu

Clear metodunu önceden de tanıyoruz.Bir listenin içindeki tüm öğeleri sildiğini görmüştük. Setlerdeki işlevide ,setlerin içindeki tüm ögeleri silmek.


[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
kume = set("OzgurYazilim")
print kume
set(['a', 'g', 'i', 'm', 'l', 'O', 'r', 'u', 'Y', 'z'])
print kume.clear()
None


Örneğimizde küme adında bir set oluşturduk. Clear() metodu ile kümemizi temizledik ve boş bir sözlük oluşturduk.
copy() metodu
Kümemizi kopyalar.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
kume = set(["copy" , "metodu"])
kume
set(['copy', 'metodu'])
yedek=kume.copy()
yedek
set(['copy', 'metodu'])


add() metodu
Add ‘ın Türkçe karşılığı 'eklemek'tir.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
kume = set(["roman" , "oyku", "hikaye","deneme"])
kume.add("masal")
kume
set(['roman', 'masal', 'oyku', 'hikaye', 'deneme'])


Bu örneğimizde kümeye masal ögesini ekledik.Şu şekilde yapsak ;
[COLOR=white !important]?[/COLOR]​
1
2
3
4
kume = set(["roman" , "oyku", "hikaye","deneme"])
kume.add("roman")
kume
set(['roman', 'oyku', 'hikaye', 'deneme'])


Küme adlı setimize roman ögesini ekledik. Fakat roman ögesi zaten kümemizde bulunduğu için roman ögesini bir daha kümeye eklemedi. Bir kümeye birden fazla öge eklemek istersek her zaman kullandığımız “for” döngüsünden yararlanırız.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
kume= set(["roman" , "oyku" , "hikaye" ,"deneme"])
eklenecek = ["J.C.Grange" , "D.Brown" , "O.Seyfettin" , "Montaigne" ]
for i in eklenecek:
kume.add(i)
kume
set(['hikaye', 'deneme', 'J.C.Grange', 'D.Brown', 'roman', 'oyku', 'O.Seyfettin', 'Montaigne'])


Yukarıda ki örneğimizde eklenecek olan listemizi küme adlı setimize ekledik. Buna böyle ugraşmak yerine Python’ın bize sağladığı kolaylık update() metodu var. Onunla bu işlem daha kolay.Buyrun öğrenelim.
update() metodu
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
kume= set(["roman","oyku" , "hikaye" ,"deneme"])
eklenecek= ["J.C.Grange" , "D.Brown" ,"O.Seyfettin" , "Montaigne"]
kume.update(eklenecek)
print kume
set(['hikaye', 'deneme', 'J.C.Grange', 'D.Brown', 'roman', 'oyku', 'O.Seyfettin', 'Montaigne'])


Gördüğümüz üzere eklenecek adlı bir liste oluşturarak update metodu ile kümemize listemizi ekledik. Böylece kümemizi güncellemiş olduk .
difference() metodu
İki küme arasındaki farklılıkları bulmamızı sağlar.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
kum1= set(["roman" , "oyku", "hikaye"])
kum2= set(["roman" , "oyku" , "masal" , "fikra"])
kum1.difference(kum2) #kume 1 in kume 2 'den farklarını yazdır.
set(['hikaye'])
kum2.difference(kum1) #kume 2'nin kume 1'den farkını yazir.
set(['fikra', 'masal'])


Tabi bunun çok kolay bir yolu daha var.İki kümenin farkını Fark (-) işareti ile de bulabiliriz.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
kum1-kum2
set(['hikaye'])
kum2-kum1
set(['fikra', 'masal'])


difference_update() metodu
Difference metodu, iki küme arasındaki farkları buluyordu. Update metodu , kümenin güncelleştirmesini yapıyordu. O zaman difference_update metodu , hem fark bulur hemde güncelleme yapar.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
7
8
kum1= set(["roman" , "oyku", "hikaye"])
kum2= set(["roman" , "oyku" , "masal" , "fikra"])
kum1.difference_update(kum2)
set(["roman" , "oyku"])
print kum1
set(["roman" ,"oyku"])
print kum2
set(["roman","oyku","masal" ,"fıkra"])


discard() metodu
Kümeden öge silmemizi sağlar.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
kis_meyveleri = ["ayva" ,"muz" , "kivi" , "nar"]
kume=set(kis_meyveleri)
kume.discard("ayva")
print kume
set(['nar', 'kivi', 'muz'])


burada bilmemiz gereken eğer; eğer kümede olmayan bir ögeyi silmeye çalışırsak , hata mesajı almayiz.
[COLOR=white !important]?[/COLOR]​
1
kume.discard("cilek")


Gördüğünüz gibi hata mesajı almadan yolumuza devam ediyoruz. Bize hatamızı söyleyecek bir metot yok mu? Tabi ki var:”remove metodu.”
remove() metodu
Silme işlemi yapar. Discard metodundan farkı : kümemizde olmayan bir elemanı silmek istediğimizde bize hata mesajı verir.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
kume.remove("cilek")
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
kume.remove("cilek")
KeyError: 'cilek'
</module></pyshell>


intersection() metodu
İntersection kelimesinin Türkçe anlamı ‘kesişim’ demektir. Kelimenin anlamından da anlayacağımız üzere bu metodumuz , iki farkı kümenin kesişimini bulmamızı sağlar.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
kum1=set(["ayva" , "muz" , "kivi" , "nar"])
kum2=set(["ayva" , "muz" , "cilek" , "erik"])
kum1.intersection(kum2)
set(['ayva', 'muz'])


Bu kesişimi bir ‘&’ işareti ile de yapabiliriz.
[COLOR=white !important]?[/COLOR]​
1
2
kum1 & kum2
set(['ayva', 'muz'])


intersection_update() metodu
Kümelerin kesişmelerini bulduktan sonra onları update eder. (günceller.)
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
7
8
9
10
kum1=set(["ayva" , "muz" , "kivi" , "nar"])
kum2=set(["ayva" , "muz" , "cilek" , "erik"])
kum1.intersection_update(kum2)

print kum1.intersection_update(kum2)
None
kum1
set(['ayva', 'muz'])
kum2
set(['erik', 'cilek', 'ayva', 'muz'])


örnekte olduğu gibi intersection_update özelliğini kullandıktan sonra kum1 kümesinin ögeleri kesişim elemanları olarak değişmiştir.
isdisjoint() metodu
Bu metot ile iki kümenin kesişimlerinin boş olup olmadığını kontrol etmemizi sağlar.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
7
8
kum1=set([1,2,3,4])
kum2=set([3,4,5,6])
kum1.isdisjoint(kum2)
False #false gelmesinin nedeni kum1-kum2 kesişiminin boş olmamasıdır.
kum1=set([1,2,3,4])
kum2=set([5,6,7,8])
kum1.isdisjoint(kum2)
True #kum1-kum2 kesişimleri olmadığı için true döndü.


issubset () metodu
Bir kümenin başka bir kümenin alt küme olup olmadığını gösterir.eğer küme diğerinin alt kümesiyse true , değilse false dönecektir.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
7
8
kum1=set(["ayva" , "muz"])
kum2=set(["ayva" , "muz" , "kivi" , "nar"])
kum1.issubset(kum2)
True
kum1=set(["cilek" , "erik"])
kum2=set(["ayva" , "muz" , "kivi" , "nar"])
kum1.issubset(kum2)
False


issuperset () metodu
Kapsar anlamına gelmektedir.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
kum1=set(["ayva" , "muz"])
kum2=set(["ayva" , "muz" , "kivi" , "nar"])
kum2.issuperset(kum1)
True #kum2 kümesi kum1 isimli kümeyi kapsar.
#Bu öneri doğru olduğu için true döndü ,yanlış olsaydı false dönerdi.


union() metodu
İki kümenin birleşimini almamızı sağlar.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
7
kum1=set(["ayva" , "muz"])
kum2=set(["kivi" , "nar"])
kum1.union(kum2)
set(['nar', 'kivi', 'ayva', 'muz'])
kum1=set(["kivi" , "nar"])
kum1.union(kum2)
set(['nar', 'kivi']) #Burada olduğu gibi tekrar edilen kelimeleri bir kere yazdırdı.


Birleşim metodunun da kısa bir yolu var: “|” işareti.
[COLOR=white !important]?[/COLOR]​
1
2
kum1 | kum2
set(['nar', 'kivi'])


symmetric_difference() metodu
Bu metot kümede olmayan elemanları yazdırmamızda yardımcı olur.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
kum1=set([1,2,3,4])
kum2=([1,2,5,6])
kum1.symmetric_difference(kum2)
set([3,4,5,6])


symmetric_difference_update() metodu
Buradaki metotlerın hepsini önceden gördük. Bildiklerimizi birleştirirsek symmetric_difference_update metodu ; iki küme arasındaki farklılıkları yazdırır ve güncelleme yapar. Örneğimizle daha iyi anlayalım.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
kum1=set([1,2,3,4])
kum2=([1,2,5,6])
kum1.symmetric_difference(kum2)
set([3,4,5,6])
print kum1
set([3,4,5,6])


Dondurulmuş Kümeler(Frozenset)

Eğer ögeleri üstünde değişiklik yapılmayan bir küme istiyorsak , set() yerine frozenset() fonksiyonunu kullanıyoruz. İsterseniz bir örnek yapalım.
[COLOR=white !important]?[/COLOR]​
1
2
3
4
5
6
7
8
dondurulmus= frozenset(["elma","armut","ayva"])
dondurulmus.add("muz")

Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
dondurulmus.add("muz")
AttributeError: 'frozenset' object has no attribute 'add'
</module></pyshell>



[COLOR=white !important]?[/COLOR]​
1
2
<pyshell><module>
</module></pyshell>


Sorular

1- Kümelerin diğer veri tiplerinden farkları nedir?
2-Bir küme içinde herhangi bir ögenin bulunup , bulunamayacağını sorgulayalım.
3-liste içinde ögeler tanımlayın daha sonra kümeyi kullanarak , listenin içinde kaç tane aynı ögeden olduğunu yazdıran bir program oluşturalım.


Kaynaklar

http://pythontr.jimdo.com
http://www.istihza.com/
http://www.tutorialspoint.com

[/COLOR]
 
Üst