Hurry! Try our new Interactive Courses for FREE. 🥳   🚀
  Signup/Sign In

How to generate all Permutations of a List

In this article, we will learn how to generate all possible permutations of a list in Python. We will use some built-in functions and some custom codes as well. Let's first have a quick look over what is a list and what is permutation in Python.

Python List

Python has a built-in data type called list. It is like a collection of arrays with different methodology. Data inside the list can be of any type say, integer, string or a float value, or even a list type. The list uses comma-separated values within square brackets to store data. Lists can be defined using any variable name and then assigning different values to the list in a square bracket. The list is ordered, changeable, and allows duplicate values. For example,

list1 = ["Ram", "Arun", "Kiran"]
list2 = [16, 78, 32, 67]
list3 = ["apple", "mango", 16, "cherry", 3.4]

We all have heard and studied the permutation concept in mathematics, likewise, Python supports some built-in functions to generate permutations of a list. Python provides a standard library tool to generate permutations by importing itertools package to implement the permutations method in python. We will also discuss the recursive method to generate all possible permutations of a list.

Example Generate Permutations of a list

The below example passes the given list as an argument to itertools.permutations() function. It defaults to the length of the list and hence generates all possible permutations.

import itertools

list1 = [1, 2, 3]

perm = list(itertools.permutations(list1))

print(perm)


[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

Example: Generate successive 'r' length permutations of a list

The below example passes the given list and length as an argument to itertools.permutations() function. It generates the permutations of the given length.

import itertools
list1 = [1, 2, 3]
r = 2
perm = list(itertools.permutations(list1, r))
print(perm)


[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

Example: Generate Permutations of a list

The below example takes an empty list to store all permutations of all possible length of a given list. extend() function is used to add items to the empty list one after the other. Iterating over the elements of the list using for loop, the itertools.permutations() function finds all the possible lengths.

import itertools

list1 = [1, 2, 3]

perm = []

for i in range(1,len(list1)+1):
    perm.extend(list(itertools.permutations(list1, r=i)))
print(perm)


[(1,), (2,), (3,), (1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2), (1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

Example: Recursion method to generate all permutations of a list

The below example uses recursion to generate all permutations of a list. It defaults to the length of the list and hence generates all possible permutations.

def perm(start, end=[]):
    if(len(start) == 0):
        print(end)
    else:
        for i in range(len(start)):
            perm(start[:i] + start[i+1:], end + start[i:i+1])
            
#function call
perm([1,2,3])


[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]

Conclusion

In this article, we learned to generate all possible permutations of a list by using itertools.permutations() function and recursive method. We discussed them with different examples.