Intermediate Python Articles #2

  • Konbuyu başlatan PwnLab.Me
  • Başlangıç tarihi
P

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
202
Tepkime puanı
9
Puanları
18
Süleyman KAYA tarafından yazılmıştır.

[TR] Intermediate Python Articles #2​


Selam, Ben Süleyman Kaya! Siber güvenlik, veri bilimi ve bilgisayar bilimleri araştırmacısıyım. Sizlere öğrenirken edindiğim tecrübelerimi ve notlarımı aktarmaya çalışacağım. Bu dönemde, ilerleyen zaman içinde sıkça kullanacağımız için Python programlama dili hakkında makaleler yazmayı planlıyorum. Bu yazımda Counter ve Itertools’a değindim. Faydası olması dileğiyle.

Counter​


Counter nedir? Counter, öğeleri dictionary key’leri olarak saklayan bir kaptır ve sayıları dict değerleri olarak saklar.

Kod:
from collections import Counter
a = "aaaaabbbbcccdde"
my_counter = Counter(a)
print(my_counter)

print(my_counter.items())
print(my_counter.keys())
print(my_counter.values())

my_list = [0, 1, 0, 1, 2, 1, 1, 3, 2, 3, 2, 4]
my_counter = Counter(my_list)
print(my_counter)

# En çok kullanılan ögeler
print(my_counter.most_common(1))

# Her birinin sayısı kadar tekrar eden elemanların üzerine bir iterator döndürün.
# Öğeler rastgele sırayla print edilir
print(list(my_counter.elements()))

Kod:
    Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
    dict_items([('a', 5), ('b', 4), ('c', 3), ('d', 2), ('e', 1)])
    dict_keys(['a', 'b', 'c', 'd', 'e'])
    dict_values([5, 4, 3, 2, 1])
    Counter({1: 4, 2: 3, 0: 2, 3: 2, 4: 1})
    [(1, 4)]
    [0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4]

napedtuple​


namedtuples oluşturması kolay, hafif nesne türleridir. Bir tuple’daki her konuma anlam atarlar ve daha okunabilir, kendi kendini belgeleyen koda izin verirler. Normal kayıtların kullanıldığı her yerde kullanılabilirler ve alanlara konum indeksi yerine ada göre erişebilirler.

Kod:
from collections import namedtuple
# kendi ismi ve alanları da string olan bir class name namedtuple oluşturun.
# alanlar virgül yada boşluk ile ayrılabilir.
Point = namedtuple('Konum','x, y')
pt = Point(1, -4)
print(pt)
print(pt._fields)
print(type(pt))
print(pt.x, pt.y)

Person = namedtuple('Kisi','isim, yas')
friend = Person(name='Suleyman', age=15)
print(friend.name, friend.age)

Kod:
    Konum(x=1, y=-4)
    ('x', 'y')
    <class '__main__.Point'>
    1 -4
    Suleyman 15

OrderedDict​


OrderedDicts normal dictionary’ler gibidir, ancak öğelerin eklendiği sırayı hatırlarlar. Sıralı bir dictionary üzerinde yineleme yaparken, öğeler key’lerinin ilk eklendiği sırayla iade edilir. Yeni bir giriş mevcut bir girişin üzerine yazarsa, orijinal ekleme konumu değişmeden kalır. Yerleşik dict class’ının ekleme sırasını hatırlama yeteneği kazandığı için artık daha az önemli hale geldi (Python 3.7’den beri garantilidir). Ancak bazı farklılıklar hala var, örn. OrderedDict yeniden sıralama işlemlerinde iyi olacak şekilde tasarlanmıştır.

Kod:
from collections import OrderedDict
ordinary_dict = {}
ordinary_dict['a'] = 1
ordinary_dict['b'] = 2
ordinary_dict['c'] = 3
ordinary_dict['d'] = 4
ordinary_dict['e'] = 5
# bu, Python 3.7'den önce orbitrary bir sırada olabilir.
print(ordinary_dict)

ordered_dict = OrderedDict()
ordered_dict['a'] = 1
ordered_dict['b'] = 2
ordered_dict['c'] = 3
ordered_dict['d'] = 4
ordered_dict['e'] = 5
print(ordered_dict)
# sıradan dictionary'le aynı işlevselliğe sahiptir fakar her zaman sıralıdır.
for k, v in ordinary_dict.items():
    print(k, v)

Kod:
    {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
    OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)])
    a 1
    b 2
    c 3
    d 4
    e 5

defaultdict​


Defaultdict, olağan dict kabına benzer bir kaptır, -bu arada kaba benzetmemin sebebi kastım birden fazla veriyi bir arada tuttuğu içindir- ancak tek fark, bir defaultdict’in, o key henüz ayarlanmadıysa varsayılan bir değere sahip olmasıdır. Varsayılan bir hüküm kullanmadıysanız, bu anahtarın var olup olmadığını kontrol etmeniz ve yoksa istediğiniz şeye ayarlamanız gerekir.

Kod:
from collections import defaultdict

# varsayilan degeri atayin, ornek: 0
d = defaultdict(int)
d['yellow'] = 1
d['blue'] = 2
print(d.items())
print(d['green'])

# varsayilanlari bir liste ile atayin, ornegin bos bir liste ile.
d = defaultdict(list)
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 5)]
for k, v in s:
    d[k].append(v)

print(d.items())
print(d['green'])

Kod:
    dict_items([('yellow', 1), ('blue', 2)])
    0
    dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [5])])
    []

deque​


Deque, çift uçlu bir kuyruktur. Her iki uçtan eleman eklemek veya çıkarmak için kullanılabilir. Deque’ler, her iki yönde de yaklaşık olarak aynı O (1) performansıyla iş parçacığı güvenli, bellek açısından verimli, deque’nun her iki tarafından ekler ve çıkar. Daha yaygın olarak kullanılan yığınlar ve kuyruklar, girdilerin ve çıktıların tek bir uçla sınırlandırıldığı dejenere dekor biçimleridir.

Kod:
from collections import deque
d = deque()

# append() : sağ uca eleman ekler
d.append('a')
d.append('b')
print(d)

# appendleft() : sol ucun sonuna eleman ekler
d.appendleft('c')
print(d)

# pop() : sağdan sola elementleri siler ve döndürür.
print(d.pop())
print(d)

# popleft() : soldan sağa elementleri siler ve döndürür.
print(d.popleft())
print(d)

# clear() : remove all elements
d.clear()
print(d)

d = deque(['a', 'b', 'c', 'd'])

# sağ veya sol tarafa uzatır.
d.extend(['e', 'f', 'g'])
d.extendleft(['h', 'i', 'j']) # j'nin artık en soldaki konumda olduğuna dikkat edin.
print(d)

# count(x) : eleman sayısını döndürür.
print(d.count('h'))

# 1 pozisyonu sağa döndürür.
d.rotate(1)
print(d)

# 2 pozisyonu sola döndürür
d.rotate(-2)
print(d)

Kod:
    deque(['a', 'b'])
    deque(['c', 'a', 'b'])
    b
    deque(['c', 'a'])
    c
    deque(['a'])
    deque([])
    deque(['j', 'i', 'h', 'a', 'b', 'c', 'd', 'e', 'f', 'g'])
    1
    deque(['g', 'j', 'i', 'h', 'a', 'b', 'c', 'd', 'e', 'f'])
    deque(['i', 'h', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'j'])

Kapanış​


Şimdilik bu kadardı, bir sonraki yazımda görüşmek üzere.
 
Moderatör tarafında düzenlendi:
Geri
Üst