Skip to content

# Python: Combinations of a List (Get All Combinations of a List)

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:

1. We import the `combinations` function from `itertools`
2. We create a sample list and an empty list to store our data in
3. 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.
4. 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.

#### Nik Piepenbreier

Nik is the author of datagy.io and has over a decade of experience working with data analytics, data science, and Python. He specializes in teaching developers how to use Python for data science using hands-on tutorials.View Author posts

## 4 thoughts on “Python: Combinations of a List (Get All Combinations of a List)”

1. 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

1. 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)]```

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

1. 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))