Itertools Nedir

Anlatabilirmisiniz bu kütüphane ne işe yarar?, sanırım iterator ler ile ilgili ama hala ne işe yaradığını bilmiyorum(tam olarak).

Kütüphane genel olarak isminden de anlaşılabileceği gibi yineleme (iterating) ile alakalı araçlar sağlıyor:

This module implements a number of iterator building blocks inspired by constructs from APL, Haskell, and SML. Each has been recast in a form suitable for Python.

Evet iteratörleri kullanırken kolaylıklar sağlayacak fonksiyonlar barındırıyor içinde. Bu fonksiyonlar burada anlatılmış:

saolun anladım araştırıcağım

Örnek kullanım;

from itertools import accumulate
list1 = [1, 2, 3 , 4, 5]
list2 = list(accumulate(list1))
print(list2)

Sonuç : [1, 3, 6, 10, 15]

bu fonksiyonun ne yaptığını açıklarsanız çok sevinirim

Örnek hatalı.


def accumulate(iterable, func=operator.add, *, initial=None):
    'Return running totals'
    # accumulate([1,2,3,4,5]) --> 1 3 6 10 15
    # accumulate([1,2,3,4,5], initial=100) --> 100 101 103 106 110 115
    # accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
    it = iter(iterable)
    total = initial
    if initial is None:
        try:
            total = next(it)
        except StopIteration:
            return
    yield total
    for element in it:
        total = func(total, element)
        yield total

Örnekte yanlış olan nedir çözemedim? Verdiğim kodları derleyiciye yazıp çalıştırırsanız belirttiğim sonuç alınıyor.

itertools modülü içindeki accumulate fonksiyonu ile yinelenebilir (iterable) nesneler üzerinde, elemanları birikimli olarak kapsayacak şekilde işlem yapabilirsiniz. Verdiğim örnekte, list1’deki elemanları birikimli şekilde alıp toplama yapıyor ve list2 olarak başka bir değişkene atıyoruz. Şöyle ki;
list2[0] = list1[0] = 1
list2[1] = list1[0] + list1[1] = 1+2 = 3
list2[2] = list1[0] + list1[1] + list1[2] = 3+3 = 6
list2[3] = list1[0] + list1[1] + list1[2]+ list1[3] = 6+4 = 10
list2[4] = list1[0] + list1[1] + list1[2]+ list1[3] + list1[4] = 10+5 = 15

Bunun haricinde accumalate’i bir fonksiyon ile de kullanabilirsiniz;
Örnek:

from  itertools import accumulate
list1 = [4, 1, 5, 3, 5, 8, 2]
list2 = list(accumulate(list1, max))
print(list2)

Sonuç : [4, 4, 5, 5, 5, 8, 8]

Burada da accumulate ile list1’deki elemanları birikimli olarak ele alıyoruz ve max fonksiyonu içine sokuyoruz.

1 Beğeni

Hayır çalışmıyor.

>>> list2 = list(accumulate, list1)
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    list2 = list(accumulate, list1)
TypeError: list expected at most 1 argument, got 2

Böyle olmalı:

>>> list2 = list(accumulate(list1))

Burda da parantez unutmuşsunuz :slightly_smiling_face:

İlki için parantez yerine virgül kullanmışım düzeltildi. İkincisi için de eksik parantez eklendi. Kodlar çalışıyor şu anda, teşekkürler düzeltme için.

1 Beğeni