# itertools module - combinations

By Martin McBride, 2022-07-23
Tags: combinations itertools python standard library
Categories: python standard library

The combination function returns a sequence of combinations of the values in the input iterable. A combination is every unique set of r elements from the iterable. See this article for more information on combinations.

For example:

a = [1, 2, 3, 4]
for i in itertools.combinations(a, r=2):
print(i)


This returns:

(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)


Notice that this list contains (1, 2) but it doesn't contain (2, 1). Combinations do not take account of the order of the values, so (1, 2) and (2, 1) are considered to be the same combination.

This type of combination is often called combination without replacement. If we have four cards numbered 1 to 4, and we:

• Draw a card at random from the 4 cards.
• Draw a second card at random from the remaining 3 cards (ie without replacing the first card).

The set of possible combinations would be the ones listed above.

## combinations_with_replacement

combinations_with_replacement is similar to combinations except that input elements can be repeated. For example:

a = [1, 2, 3, 4]
for i in itertools.combinations_with_replacement(a, r=2):
print(i)


This adds some extra combinations: (1, 1), (2, 2), (3, 3), and (4, 4):

(1, 1)
(1, 2)
(1, 3)
(1, 4)
(2, 2)
(2, 3)
(2, 4)
(3, 3)
(3, 4)
(4, 4)


The combination with replacement scanario is like this. We have four cards numbered 1 to 4, and we:

• Draw a card at random from the 4 cards.
• Make a note of the first card then put ot back in the deck.
• Draw a second card at random from the 4 cards.

This would make the extra combinations (1, 1), (2, 2) etc possible. Another example would be throwing a dice several times. Clearly the same number could appear more than once.