Python’da Sets konusunu hazırlayan Yüksek Lisans Öğrencim “Esma Kahraman”a teşekkürler. Bu bölümde biraz matematiksel bilgileri tazeleyeceğiz.
Matematik eğitimindeki kümeleri hatırlıyorsunuzdur.
Python’un yerleşik set tipi aşağıdaki özelliklere sahiptir:
- Sets sırasızdır.
- Set elemanları benzersizdir. Yinelenen ögelere izin verilmez.
- Bir setin kendisi değiştirilebilir, ancak sette yer alan elemanlar değişmez tipte olmalıdır.
Bir set iki şekilde oluşturulabilir. Öncelikle yerleşik set() fonksiyona sahip bir set tanımlayabiliriz:
1 2 |
x = set ([ 'ali' , 'ayse' , 'fatma' , 'ahmet' , 'mehmet', 'ahmet']) print(x) |
1 |
{'ayse', 'mehmet', 'ahmet', 'fatma', 'ali'} |
1 2 |
x = set (('ali' , 'ayse' , 'fatma' , 'ahmet' , 'mehmet')) print(x) |
1 |
{'ayse', 'mehmet', 'ahmet', 'fatma', 'ali'} |
Listeler yinelenebilir, bu yüzden bir sırada iletilebilir. list(s) karakterlerin bir listesini oluşturduğunu görmüştük. Benzer şekilde, set(s) aşağıdaki karakter kümesini oluşturur:
1 2 |
s = 'merhaba' list(s) |
1 |
['m', 'e', 'r', 'h', 'a', 'b', 'a'] |
1 |
set(s) |
1 |
{'a', 'b', 'e', 'h', 'm', 'r'} |
Bir set boş olabilir. Boş kümeyi süslü parantezle tanımlarsak onu bir dictionary olarak görür. Bu yüzden boş bir set tanımlayacaksak normal parantez ile tanımlamalıyız:
1 2 |
x = set() type(x) |
1 |
<class 'set'> |
1 |
x |
1 |
set() |
Boş bir set boolean değer olarak false döner:
1 2 |
x = set() bool(x) |
1 |
False |
1 |
x or 1 |
1 |
1 |
1 |
x and 1 |
1 |
set() |
Bu set elemanlarının değişmez olması gerektiğini unutmayın. Örneğin, bir kümeye bir tuple dahil olabilir:
1 2 |
x = { 42 , 'ali' , ( 1, 2, 3), 3.14159 } print(x) |
1 |
{42, 'ali', 3.14159, (1, 2, 3)} |
1. Set İçin Boyut ve Üyelik
len() fonksiyonu set boyutunu bulmak için kullanılabilir. Ayrıca in ve not in fonksiyonları belirtilen üyenin o sette bulunup bulunmadığının kontrolü için kullanılabilir.
1 2 3 4 5 |
x = {'ali', 'ayse', 'fatma'} print(len(x)) print('ali' in x) print('ahmet' in x) print('ahmet' not in x) |
1 2 3 4 |
3 True False True |
2. Operatörler ve Yöntemler
Matematikteki küme fonksiyonları Phyton’da da mevcuttur. Birleşim kümesi için and (|) yapısı kullanılır. Kümelerde birleşim işlemi yapılırken aynı öğeler bir kez yazılır.
1 2 3 |
x1 = { 'ali' , 'ayse' , 'ahmet' } x2 = { 'ahmet' , 'mehmet' , ' fatma ' } x1 | x2 |
1 |
{'fatma', 'ahmet', 'ali', 'ayse', 'mehmet'} |
Set birleştirme union() metodu ile de elde edilebilir . Yöntem kümelerden birinde çağrılır, diğeri de argüman olarak iletilir:
1 |
x1.union( x2 ) |
1 |
{'fatma', 'ahmet', 'ali', 'ayse', 'mehmet'} |
Arasında aslında ufak bir fark vardır. | aynı veri türlerini birleştirirken union farklı veri türlerini birleştirebilir. Örneğin bir tuple ile set’i birleştirme birleştirmesinde:
1 |
x1 | ('ahmet' , 'mehmet' , ' fatma ' ) |
1 2 3 4 |
Traceback (most recent call last): File "<pyshell#43>", line 1, in <module> x1 | ('ahmet' , 'mehmet' , ' fatma ' ) TypeError: unsupported operand type(s) for |: 'set' and 'tuple' |
Aynı işlemi union ile yaparsak:
1 |
x1.union(('ahmet' , 'mehmet' , ' fatma ' )) |
1 |
{'fatma', 'ahmet', 'ali', 'ayse', 'mehmet'} |
İkiden fazla set, operatör veya yöntemle belirtilebilir:
1 2 3 4 5 6 |
a = { 1, 2, 3, 4} b = { 2, 3, 4, 5} c = { 3, 4, 5, 6} d = { 4, 5, 6, 7} print(a.union( b, c, d)) print(a | b | c | d ) |
1 2 |
{1, 2, 3, 4, 5, 6, 7} {1, 2, 3, 4, 5, 6, 7} |
Ortaya çıkan set, belirtilen kümelerden herhangi birinde bulunan tüm öğeleri içerir.
Şimdi de kesişim kümesini hesaplayalım. Bunun için & operatörü veya intersection() yöntemi kullanılır:
1 2 3 4 |
x1 = { 'ali' , 'ayse' , 'ahmet' } x2 = { 'ahmet' , 'mehmet' , ' fatma ' } print(x1.intersection(x2)) print(x1 & x2) |
1 2 |
{'ahmet'} {'ahmet'} |
Bir setin diğerinden farkını bulmak için (-) operatörü ya da difference() metodu kullanılabilir:
1 2 3 4 5 |
a = {1, 2, 3, 30, 300} b = {10, 20, 30, 40} c = {100, 200, 300, 400} print(a.difference(b, c)) print(a - b - c) |
1 2 |
{1, 2, 3} {1, 2, 3} |
Simetrik farkı bulmak için (^) operatörü veya symmetric_difference() metodu kullanılabilir:
1 2 3 4 5 |
a = {1, 2, 3, 4, 5} b = {10, 2, 3, 4, 50} c = {1, 50, 100} print(a.symmetric_difference(b).symmetric_difference(c)) print(a ^ b ^ c) |
1 2 |
{100, 5, 10} {100, 5, 10} |
isdisjoint() metodu iki kümenin ortak bir öğeye sahip olup olmadığını belirler. Bu metoda karşılık gelen bir operatör yoktur.
1 2 3 4 |
x1 = { 1, 3, 5 } x2 = { 2, 4, 6 } print(x1.isdisjoint ( x2 )) print(x1 & x2) |
1 2 |
True set() |
issubset()bir kümenin diğerinin alt kümesi olup olmadığını belirler. Bu metotta bir kümenin kendisi bir alt kümesi olarak kabul edilir.
1 2 3 4 5 |
x1 = { 'ali' , 'ayse' , 'ahmet' } print(x1.issubset ({ 'mehmet' , 'ali' , 'ahmet' , 'ayse' , 'fatma' })) x2 = { 'ahmet' , 'mehmet' , 'fatma' } print(x1 <= x2) print(x1 <= x1) |
1 2 3 |
True False True |
x1 < x2 bir kümenin diğerinin uygun bir alt kümesi olup olmadığını belirler. Uygun bir alt küme, bir alt kümeyle aynıdır, ancak kümeler aynı olamaz.
1 2 3 4 5 6 |
x1 = { 'ahmet' , 'ayse' } x2 = { 'ahmet' , 'ayse' , 'fatma' } print(x1 < x2) x3 = { 'ahmet' , 'ayse' , 'fatma' } x4 = { 'ahmet' , 'ayse' , 'fatma' } print(x3 < x4) |
1 2 |
True False |
x1.issuperset(x2) ve x1 >= x2 bir kümenin diğerinin üst kümesi olup olmadığını belirler.
1 2 3 4 |
x1 = { 'ahmet' , 'ayse' , 'fatma' } print(x1.issuperset ({ 'ahmet' , 'ayse' })) x2 = { 'ahmet' , 'mehmet' , ' fatma ' } print(x1 >= x2) |
1 2 |
True False |
x1 > x2 bir kümenin bir diğerinin uygun bir üst kümesi olup olmadığını belirler.
1 2 3 4 5 6 |
x1 = { 'ahmet' , 'ayse' , 'fatma' } x2 = { 'ahmet' , 'ayse' } print(x1 > x2) x1 = { 'ahmet' , 'ayse' , 'fatma' } x2 = { 'ahmet' , 'ayse' , 'fatma' } print(x1 > x2) |
1 2 |
True False |
x1.update(x2) ve x1 |= x2 olmayan elemanları ekler. x2 set olabilir.
1 2 3 4 5 6 |
x1 = { 'ahmet' , 'ayse' , 'fatma' } x2 = { 'ahmet' , 'fatma' , 'ali' } x1 |= x2 print(x1) x1.update ([ 'esma' , 'mehmet' ]) print(x1) |
1 2 |
{'ali ',' ahmet ',' ayse ',' fatma '} {'ahmet', 'ali', 'ayse', 'esma', 'fatma', 'mehmet'} |
add(‘eleman’) metodu kümeye yeni bir eleman ekler.
1 2 3 |
x = { 'ahmet' , 'ayse' , 'fatma' } x.add( 'ali' ) print(x) |
1 |
{'ahmet', 'ali', 'ayse', 'fatma'} |
remove(‘eleman’) bir kümeden belirtilen elemanı çıkarır.
1 2 3 4 |
x = { 'ahmet' , 'ayse' , 'fatma' } x.remove('ahmet') print(x) x.remove('ahmet') |
1 2 3 4 5 |
{'ayse', 'fatma'} Traceback (most recent call last): File "<pyshell#58>", line 1, in <module> x.remove('ahmet') KeyError: 'ahmet' |
discard(‘eleman’) remove ile aynı işi yapar. Ancak belirtilen eleman kümede yoksa hata vermez.
1 2 3 4 5 |
x = { 'ahmet' , 'ayse' , 'fatma' } x.discard('ayse') print(x) x.discard('ayse') print(x) |
1 2 |
{'ahmet', 'fatma'} {'ahmet', 'fatma'} |
pop() rastgele bir eleman siler.
1 2 3 4 5 6 7 8 |
x = { 'ahmet' , 'ayse' , 'fatma' } print(x.pop()) print(x) print(x.pop()) print(x) print(x.pop()) print(x) x.pop() |
1 2 3 4 5 6 7 8 9 10 |
'ayse' {'ahmet', 'fatma'} 'fatma' {'ahmet'} 'ahmet' set() Traceback (most recent call last): File "<pyshell#82>", line 1, in <module> x.pop() KeyError: 'pop from an empty set' |
clear() bir kümenin içini boşaltır.
1 2 3 4 |
x = { 'ahmet' , 'ayse' , 'fatma' } print(x) x.clear() print(x) |
1 2 |
{'fatma', 'ayse', 'ahmet'} set() |