Kümeler kuramı

Verimli Python Kodu Yazmak

Logan Thomas

Scientific Software Technical Trainer, Enthought

Kümeler kuramı

  • Nesne koleksiyonlarına uygulanan matematik dalı
    • ör. sets
  • Python’da yöntemleriyle birlikte yerleşik set veri türü vardır:
    • intersection(): iki kümede de olan öğeler
    • difference(): bir kümede olup diğerinde olmayanlar
    • symmetric_difference(): yalnızca bir kümede olanlar
    • union(): iki kümeden herhangi birinde olanlar
  • Hızlı üyelik testi
    • Bir değerin dizide olup olmadığını denetleyin
    • in işleci ile
Verimli Python Kodu Yazmak

Döngülerle nesneleri karşılaştırma

list_a = ['Bulbasaur', 'Charmander', 'Squirtle']
list_b = ['Caterpie', 'Pidgey', 'Squirtle']

alt=”Bulbasaur, Charmander ve Squirtle Pokémon’ları Liste A başlıklı bir kutuda; Caterpie, Pidgey ve Squirtle ayrı bir kutuda Liste B başlığıyla”

Verimli Python Kodu Yazmak

Döngülerle nesneleri karşılaştırma

list_a = ['Bulbasaur', 'Charmander', 'Squirtle']
list_b = ['Caterpie', 'Pidgey', 'Squirtle'] 

alt=”Bulbasaur, Charmander ve Squirtle Pokémon’ları Liste A’da; Caterpie, Pidgey ve Squirtle ayrı Liste B’de; Squirtle her iki kutuda daire içine alınmış”

Verimli Python Kodu Yazmak
list_a = ['Bulbasaur', 'Charmander', 'Squirtle']
list_b = ['Caterpie', 'Pidgey', 'Squirtle'] 
in_common = []

for pokemon_a in list_a:
    for pokemon_b in list_b:
        if pokemon_a == pokemon_b:
            in_common.append(pokemon_a)

print(in_common)
['Squirtle']
Verimli Python Kodu Yazmak
list_a = ['Bulbasaur', 'Charmander', 'Squirtle']
list_b = ['Caterpie', 'Pidgey', 'Squirtle'] 
set_a = set(list_a)
print(set_a)
{'Bulbasaur', 'Charmander', 'Squirtle'}
set_b = set(list_b)
print(set_b)
{'Caterpie', 'Pidgey', 'Squirtle'}
set_a.intersection(set_b)
{'Squirtle'}
Verimli Python Kodu Yazmak

Kümelerle verimlilik kazanımı

%%timeit
in_common = []

for pokemon_a in list_a:
    for pokemon_b in list_b:
        if pokemon_a == pokemon_b:
            in_common.append(pokemon_a)
601 ns ± 17.1 ns per döngü (7 koşunun ort. ± std. sap., her biri 1000000 döngü)
%timeit in_common = set_a.intersection(set_b)
137 ns ± 3.01 ns per döngü (7 koşunun ort. ± std. sap., her biri 10000000 döngü)
Verimli Python Kodu Yazmak

Küme yöntemi: difference

set_a = {'Bulbasaur', 'Charmander', 'Squirtle'}
set_b = {'Caterpie', 'Pidgey', 'Squirtle'}
set_a.difference(set_b)
{'Bulbasaur', 'Charmander'}

alt=”Bulbasaur, Charmander ve Squirtle Pokémon’ları Küme A başlıklı bir kutuda; Caterpie, Pidgey ve Squirtle ayrı bir kutuda Küme B başlığıyla; Küme A’da Bulbasaur ve Charmander daire içine alınmış”

Verimli Python Kodu Yazmak

Küme yöntemi: difference

set_a = {'Bulbasaur', 'Charmander', 'Squirtle'}
set_b = {'Caterpie', 'Pidgey', 'Squirtle'}
set_b.difference(set_a)
{'Caterpie', 'Pidgey'}

alt=”Bulbasaur, Charmander ve Squirtle Pokémon’ları Küme A başlıklı bir kutuda; Caterpie, Pidgey ve Squirtle ayrı bir kutuda Küme B başlığıyla; Küme B’de Caterpie ve Pidgey daire içine alınmış”

Verimli Python Kodu Yazmak

Küme yöntemi: symmetric_difference

set_a = {'Bulbasaur', 'Charmander', 'Squirtle'}
set_b = {'Caterpie', 'Pidgey', 'Squirtle'}
set_a.symmetric_difference(set_b)
{'Bulbasaur', 'Caterpie', 'Charmander', 'Pidgey'}

alt=”Bulbasaur, Charmander ve Squirtle Pokémon’ları Küme A’da; Caterpie, Pidgey ve Squirtle ayrı Küme B’de; Bulbasaur, Charmander, Caterpie ve Pidgey daire içine alınmış”

Verimli Python Kodu Yazmak

Küme yöntemi: union

set_a = {'Bulbasaur', 'Charmander', 'Squirtle'}
set_b = {'Caterpie', 'Pidgey', 'Squirtle'}
set_a.union(set_b)
{'Bulbasaur', 'Caterpie', 'Charmander', 'Pidgey', 'Squirtle'}

alt=”Bulbasaur, Charmander ve Squirtle Pokémon’ları Küme A’da; Caterpie, Pidgey ve Squirtle ayrı Küme B’de; tüm Pokémon’lar daire içine alınmış ve Squirtle yalnızca bir kez”

Verimli Python Kodu Yazmak

Kümelerle üyelik testi

# Her veri yapısında aynı 720 Pokémon
names_list  = ['Abomasnow', 'Abra', 'Absol', ...]
names_tuple = ('Abomasnow', 'Abra', 'Absol', ...)
names_set   = {'Abomasnow', 'Abra', 'Absol', ...}

alt=”Abomasnow, Abra ve Absol Pokémon’ları; sırasıyla Liste, Demet ve Küme başlıklı üç ayrı kutuda”

Verimli Python Kodu Yazmak

Kümelerle üyelik testi

# Her veri yapısında aynı 720 Pokémon
names_list  = ['Abomasnow', 'Abra', 'Absol', ...]
names_tuple = ('Abomasnow', 'Abra', 'Absol', ...)
names_set   = {'Abomasnow', 'Abra', 'Absol', ...}

alt=”Abomasnow, Abra ve Absol Pokémon’ları; Liste, Demet ve Küme başlıklı üç ayrı kutuda; Zubat adlı Pokémon’dan her kutuya üyelik testi çizgileri”

Verimli Python Kodu Yazmak
names_list  = ['Abomasnow', 'Abra', 'Absol', ...]
names_tuple = ('Abomasnow', 'Abra', 'Absol', ...)
names_set   = {'Abomasnow', 'Abra', 'Absol', ...}
%timeit 'Zubat' in names_list
7.63 µs ± 211 ns per döngü (7 koşunun ort. ± std. sap., her biri 100000 döngü)
%timeit 'Zubat' in names_tuple
7.6 µs ± 394 ns per döngü (7 koşunun ort. ± std. sap., her biri 100000 döngü)
%timeit 'Zubat' in names_set
37.5 ns ± 1.37 ns per döngü (7 koşunun ort. ± std. sap., her biri 10000000 döngü)
Verimli Python Kodu Yazmak

Kümelerle tekiller

# Her Pokémon’a karşılık gelen 720 birincil tür
primary_types = ['Grass', 'Psychic', 'Dark', 'Bug', ...]
unique_types = []

for prim_type in primary_types:
    if prim_type not in unique_types:
        unique_types.append(prim_type)

print(unique_types)
['Grass', 'Psychic', 'Dark', 'Bug', 'Steel', 'Rock', 'Normal',
 'Water', 'Dragon', 'Electric', 'Poison', 'Fire', 'Fairy', 'Ice',
 'Ground', 'Ghost', 'Fighting', 'Flying']
Verimli Python Kodu Yazmak

Kümelerle tekiller

# Her Pokémon’a karşılık gelen 720 birincil tür
primary_types = ['Grass', 'Psychic', 'Dark', 'Bug', ...]
unique_types_set = set(primary_types)
print(unique_types_set)
{'Grass', 'Psychic', 'Dark', 'Bug', 'Steel', 'Rock', 'Normal',
 'Water', 'Dragon', 'Electric', 'Poison', 'Fire', 'Fairy', 'Ice',
 'Ground', 'Ghost', 'Fighting', 'Flying'}
Verimli Python Kodu Yazmak

Hadi küme kuramı pratiği yapalım!

Verimli Python Kodu Yazmak

Preparing Video For Download...