In this tutorial, you’ll learn how to use Python to get all combinations of a list. In particular, you’ll learn how to how to use the `itertool.combinations`

method to generate a list of all combinations of values in a list.

**The Quick Answer:** Use itertools.combinations to Get All Combinations of a List

Table of Contents

## What Does it Mean to Get All Combinations of a List?

In your Python journey, you may encounter the need to get all combinations of the items in a list. But what does this mean?

Let’s say you have a list that looks like this: `['a', 'b', 'c']`

.

When you create a list of all possible combinations, you’ll end up with a list that looks like this: `[(), ('a',), ('b',), ('c',), ('a', 'b'), ('a', 'c'), ('b', 'c'), ('a', 'b', 'c')]`

. Here we get a list of tuples that contain all possible combinations without replacement.

Now that you know what it means to get a list of all possible combinations of a list in Python, let’s see how you can get this done in Python!

## How to Use Itertools to Get All Combinations of a List in Python

Python comes built-in with a helpful library called `itertools`

, that provides helpful functions to work with iteratable objects. One of the many functions it comes with it the `combinations()`

function. This, as the name implies, provides ways to generate combinations of lists.

Let’s take a look at how the `combinations()`

function works:

`itertools.combinations(iterable, r)`

`iterable`

refers to the iterable for which you want to find combinations,`r`

refers to the length of the combinations you want to produce

Now that you know how the `combinations()`

function works, let’s see how we can generate all possible combinations of a Python list’s items:

```
from itertools import combinations
sample_list = ['a', 'b', 'c']
list_combinations = list()
for n in range(len(sample_list) + 1):
list_combinations += list(combinations(sample_list, n))
print(list_combinations)
# Returns: [(), ('a',), ('b',), ('c',), ('a', 'b'), ('a', 'c'), ('b', 'c'), ('a', 'b', 'c')]
```

Let’s break down what we’ve done here:

- We import the
`combinations`

function from`itertools`

- We create a sample list and an empty list to store our data in
- We then create a for-loop to loop over all possible combinations of lengths. To make this dynamic, we use the
`range()`

function, since we may not know how long our list is at any given time. - We then create a list out of the combinations object that’s returned from passing in our sample list and our
`n`

parameter

We can see that our list includes a blank combination as well. If we wanted to omit this, we could change our for-loop to be from `range(1, len(sample_list)+1)`

, in order to have a minimum number of elements in our combination.

In the next section, you’ll learn how to get all combinations of only unique values in a list.

**Want to learn more about Python for-loops?** Check out my in-depth tutorial here to learn all you need to know!

## How to Get All Combinations of Unique Values of a List in Python

In this section, you’ll learn how to get all combinations of only unique values of a list in Python. Since Python lists can contain duplicate values, we’ll need to figure out how to do this.

Say we have a list that looks like this: `['a', 'b', 'c', 'c']`

. Instead of including duplicate combinations of `c`

in our final list, we’ll first need to remove duplicates from our list.

Let’s see how we can do this in Python:

```
from itertools import combinations
sample_list = ['a', 'b', 'c', 'c']
list_combinations = list()
sample_set = set(sample_list)
for n in range(len(sample_set) + 1):
list_combinations += list(combinations(sample_set, n))
print(list_combinations)
```

This follows the same logic as the example above. The only difference is that we have first created a set out of our list. Sets are a unique data structure in Python that require each item to be unique. Therefore, it’s a helpful way to de-duplicate our list.

We then iterate over the length of the set and the set itself, to create all possible combinations.

## How to Get All Combinations with Replacement of a List in Python

In this final section, you’ll learn how to get all combinations of a list in Python with replacements. Meaning, that a single element has the potential for being picked again.

Let’s see how this can be done in Python, using `itertools`

and the `combinations_with_replacement`

function. The function does exactly what it is described as: it gets the combinates with replacements.

```
from itertools import combinations_with_replacement
sample_list = ['a', 'b', 'c']
list_combinations = list()
for n in range(len(sample_list) + 1):
list_combinations += list(combinations_with_replacement(sample_list, n))
print(list_combinations)
# Returns: [(), ('a',), ('b',), ('c',), ('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'b'), ('b', 'c'), ('c', 'c'), ('a', 'a', 'a'), ('a', 'a', 'b'), ('a', 'a', 'c'), ('a', 'b', 'b'), ('a', 'b', 'c'), ('a', 'c', 'c'), ('b', 'b', 'b'), ('b', 'b', 'c'), ('b', 'c', 'c'), ('c', 'c', 'c')]
```

We can see here that each item has the potential for being included once, twice, or three times in a list of three items.

## Conclusion

In this post, you learned how to get all combinations of a list in Python. You learned how to do this with the `itertools.combinations`

function and the `itertools.combinations_with_replacement_ function. The functions allow you to pass in a list and get the combinations without and with replacements, respectively.

To learn more about the `itertools.combinations`

function, check out the official documentation here.

Hi,

Is there a method in itertools to return the nCr # of combinations of a list? I want to take a list of 0s and 1s, and I want to return the list of unique combinations. So, given [1,1,0,0] I want to return:

1,1,0,0

1,0,1,0

1,0,0,1

0,1,1,0

0,1,0,1

0,0,1,1

Thanks

Hi Jeff,

How’s this:

from itertools import permutations

values = [1, 1, 0, 0]

# Generate all permutations considering the counts

combinations_list = list(set(permutations(values)))

print(combinations_list)

# Returns: [(0, 1, 0, 1), (1, 1, 0, 0), (0, 1, 1, 0), (1, 0, 1, 0), (1, 0, 0, 1), (0, 0, 1, 1)]

What if I wanted it to only generate combinations a certain number long?

Hi Carl, sorry for the late reply! How about this?

import itertools

values = [1, 2, 3, 4, 5]

m = 3. # The number of items you want in each combination

# Generate all combinations of m items from the list

combinations = list(itertools.combinations(values, m))