# Itertools Module

``` py
# accumulate ([1,2,3,4,5]) -> 1, 3 (1 + 2), 6 (1 + 2 + 3), 10 (1 + 2 + 3 + 6), 15 (1+ 2 + 3 + 4 + 5)
# accumulate (iter, func (,)) -> iter [0], func (iter [0] + iter [1]) + func (prev + iter [2]), ...
accumulate (iterable, func (_, _))

# iterator returns elements from the first iterable,
# then proceeds to the next until the end of the iterables
# does not work if there is only one iterable
chain (* iterable)

# concatenates elements of the single iterable even if it contains sequences
chain.from_iterable (iterable)

# returns sequences of length r starting from the iterable
# items treated as unique based on their value
combinations (iterable, r)

# # returns sequences of length r starting from the iterable allowing the repetition of the elements
combinations_with_replacement (iterable, r)

# iterator filters date elements returning only those that have
# a corresponding element in selectors that is true
compress (data, selectors)

count (start, step)

# iterator returning values ​​in infinite sequence
cycle (iterable)

# iterator discards elements of the iterable as long as the predicate is true
dropwhile (predicate, iterable)

# iterator returning values ​​if predicate is false
filterfalse (predicate, iterable)

# iterator returns tuple (key, group)
# key is the grouping criterion
# group is a generator returning group members
groupby (iterable, key = None)

# iterator returns slices of the iterable
isslice (iterable, stop)
isslice (iterable, start, stop, step)

# returns all permutations of length r of the iterable
permutations (iterable, r = None)

# Cartesian product of iterables
# loops iterables in order of input
# [product ('ABCD', 'xy') -> Ax Ay Bx By Cx Cy Dx Dy]
# [product ('ABCD', repeat = 2) -> AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD]
product (* iterable, repetitions = 1)

# returns an object infinite times if repetition is not specified
repeat (object, repetitions)

# iterator compute func (iterable)
# used if iterable is pre-zipped sequence (seq of tuples grouping elements)
starmap (func, iterable)

# iterator returning values ​​from iterable as long as predicate is true
takewhile (predicate, iterable)

# returns n independent iterators from the single iterable
tee (iterable, n = 2)

# produces an iterator that aggregates elements from each iterable
# if the iterables have different lengths the missing values ​​are filled according to fillervalue
zip_longest (* iterable, fillvalue = None)
```
