# Combinatoric Iterators in Python

Combinatoric iterators or generators contain mainly four iterators which can be used to perform combination, permutation and products of the data. These iterators are contained in the itertools library.

Generators are also a type of iterator but unlike other iterators and functions, it cannot return values instead it can directly give result when they are called or used.

There are four combinatoric iterators in  Python that are given below:

1.Permutation(): This iterator is used for calculating all possible permutation on a given input data set. In this, each value is identified uniquely from its position.

SYNTAX:

`permutations (iterable, size)`

If we do not pass the value of the size or if it is Null than size becomes equal to the length of iterables.

2.Combination(): This iterator is used to calculate all combinations of a data set. Remember this works without replacement of any value.

SYNTAX:

`combinations(iterable, size)`

3.Combination with replacement (): This iterator is like combinations, the difference is, the result comes by repeating the values given in the data set.

SYNTAX:

`combinations_with_replacement (iterable, n)`

‘n’ is the size of the constructed sequence.

4.Product(): This iterator is used to create a Cartesian product from a given data set. In this, we tell no. Of repetition we want.

SYNTAX:

`product(iterable, repetition)`

## Code(Python)

All four types of Combinatoric iterators are explained in one single program and shown how each of them actually works

```#1 PERMUTATION
from itertools import permutations
print ("Possible permutations are , example:")
A=list(permutations(range(4), 2))
print(A)

#2 COMBINATION
from itertools import combinations
print ("Possible combinations in sorted order(without replacement) are:")
B=list(combinations(range(4),2))
print(B)

#3 COMBINATION WITH REPETITION
from itertools import combinations_with_replacement
print ("Possible combinations in sorted order(with replacement) are:")
C=list(combinations_with_replacement(range(4), 2))
print(C)

#4 PRODUCT
from itertools import product
print("Possible products ,example:")
D=list(product([3, 5], repeat=3))
print(D)```

### Output

```Possible permutations are , example:
[(0, 1), (0, 2), (0, 3), (1, 0), (1, 2), (1, 3), (2, 0), (2, 1), (2, 3), (3, 0), (3, 1), (3, 2)]

Possible combinations in sorted order(without replacement) are:
[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

Possible combinations in sorted order(with replacement) are:
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]

Possible products ,example:
[(3, 3, 3), (3, 3, 5), (3, 5, 3), (3, 5, 5), (5, 3, 3), (5, 3, 5), (5, 5, 3), (5, 5, 5)]
[Program finished]```