Learn

A combinatoric iterator will perform a set of statistical or mathematical operations on an input iterable.

A useful itertool that is a combinatoric iterator is the `combinations()` itertool. This itertool will produce an iterator of tuples that contain combinations of all elements in the input.

``combinations(iterable, r)``

The `combinations()` itertool takes in two inputs, the first is an iterable, and the second is a value `r` that represents the length of each combination tuple.

The return type of `combinations()` is an iterator that can be used in a `for` loop or can be converted into an iterable type using `list()` or a `set()`.

To show how it’s used, suppose we have a list of even numbers and we want all possible combinations of 2 even numbers:

``````import itertools
even = [2, 4, 6]
even_combinations = list(itertools.combinations(even, 2))
print(even_combinations)``````

Here we:

• Import the module `itertools`.
• Create an iterator using `combinations()` with the `list` of even numbers as the first argument and `2` as the second argument.
• Set `even_combinations` equal to a `list` of the elements in the iterator returned from `combinations()`.
• Print `even_combinations`. The resulting list of `2` member tuples are the combinations of all 3 members of `even`:
``[(2, 4), (2, 6), (4, 6)]``

Now, let’s try using a combinations itertool within our pet store!

### Instructions

1.

We have another shelving unit to display by the register that can only hold 3 collars. We have a list of collars of varying colors and sizes.

We want to know how many different combinations exist to display a set of 3 collars. Use the `combinations()` itertool to do this. Set the returned iterator to a variable named `collar_combo_iterator`.

2.

Using a `for` loop, print each item in `collar_combo_iterator` to see all the possible collar combinations.