Calculate Permutations and Combinations of Elements Using Python

itertools.combinations

Generates all possible combinations of elements of a specified length:

C(5,2)C(5,2)

1
2
3
4
5
6
import itertools

str = ['A', 'B', 'C', 'D', 'E']
# Compute combinations of length 2 without replacement
combinations_result = list(itertools.combinations(str, 2))
print(combinations_result)

The output is as follows:

1
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'D'), ('C', 'E'), ('D', 'E')]

C(5,3)C(5,3)

1
2
3
4
5
6
import itertools

str = ['A', 'B', 'C', 'D', 'E']
# Compute combinations of length 3 without replacement
combinations_result = list(itertools.combinations(str, 3))
print(combinations_result)

The output is as follows:

1
[('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'B', 'E'), ('A', 'C', 'D'), ('A', 'C', 'E'), ('A', 'D', 'E'), ('B', 'C', 'D'), ('B', 'C', 'E'), ('B', 'D', 'E'), ('C', 'D', 'E')]

Also, you can use the .join() function to combine the characters of each combination:

1
2
3
4
5
6
7
8
9
10
import itertools

str = ['A', 'B', 'C', 'D', 'E']
# Compute combinations of length 3 without replacement
combinations_result = list(itertools.combinations(str, 3))
# Combine characters for each combination
new_result = []
for c in combinations_result:
new_result.append("".join(c))
print(new_result)

The output is as follows:

1
['ABC', 'ABD', 'ABE', 'ACD', 'ACE', 'ADE', 'BCD', 'BCE', 'BDE', 'CDE']

itertools.combinations_with_replacement

Generates all possible combinations of elements of a specified length:

1
2
3
4
5
6
import itertools

str = ['A', 'B', 'C', 'D', 'E']
# Compute combinations of length 2, with replacement
combinations_with_replacement_result = list(itertools.combinations_with_replacement(str, 2))
print(combinations_with_replacement_result)

The output is as follows:

1
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'B'), ('B', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'C'), ('C', 'D'), ('C', 'E'), ('D', 'D'), ('D', 'E'), ('E', 'E')]

itertools.permutations

Generates all possible permutations of elements of a specified length:

A(5,2)A(5,2)

1
2
3
4
5
6
import itertools

str = ['A', 'B', 'C', 'D', 'E']
# Compute permutations of length 2
permutations_result = list(itertools.permutations(str, 2))
print(permutations_result)

The output is as follows:

1
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'A'), ('B', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'A'), ('C', 'B'), ('C', 'D'), ('C', 'E'), ('D', 'A'), ('D', 'B'), ('D', 'C'), ('D', 'E'), ('E', 'A'), ('E', 'B'), ('E', 'C'), ('E', 'D')]

A(5,4)A(5,4)

1
2
3
4
5
6
import itertools

str = ['A', 'B', 'C', 'D', 'E']
# Compute permutations of length 4
permutations_result = list(itertools.permutations(str, 4))
print(permutations_result)

The output is as follows:

1
[('A', 'B', 'C', 'D'), ('A', 'B', 'C', 'E'), ('A', 'B', 'D', 'C'), ('A', 'B', 'D', 'E'), ('A', 'B', 'E', 'C'), ('A', 'B', 'E', 'D'), ('A', 'C', 'B', 'D'), ('A', 'C', 'B', 'E'), ('A', 'C', 'D', 'B'), ('A', 'C', 'D', 'E'), ('A', 'C', 'E', 'B'), ('A', 'C', 'E', 'D'), ('A', 'D', 'B', 'C'), ('A', 'D', 'B', 'E'), ('A', 'D', 'C', 'B'), ('A', 'D', 'C', 'E'), ('A', 'D', 'E', 'B'), ('A', 'D', 'E', 'C'), ('A', 'E', 'B', 'C'), ('A', 'E', 'B', 'D'), ('A', 'E', 'C', 'B'), ('A', 'E', 'C', 'D'), ('A', 'E', 'D', 'B'), ('A', 'E', 'D', 'C'), ('B', 'A', 'C', 'D'), ('B', 'A', 'C', 'E'), ('B', 'A', 'D', 'C'), ('B', 'A', 'D', 'E'), ('B', 'A', 'E', 'C'), ('B', 'A', 'E', 'D'), ('B', 'C', 'A', 'D'), ('B', 'C', 'A', 'E'), ('B', 'C', 'D', 'A'), ('B', 'C', 'D', 'E'), ('B', 'C', 'E', 'A'), ('B', 'C', 'E', 'D'), ('B', 'D', 'A', 'C'), ('B', 'D', 'A', 'E'), ('B', 'D', 'C', 'A'), ('B', 'D', 'C', 'E'), ('B', 'D', 'E', 'A'), ('B', 'D', 'E', 'C'), ('B', 'E', 'A', 'C'), ('B', 'E', 'A', 'D'), ('B', 'E', 'C', 'A'), ('B', 'E', 'C', 'D'), ('B', 'E', 'D', 'A'), ('B', 'E', 'D', 'C'), ('C', 'A', 'B', 'D'), ('C', 'A', 'B', 'E'), ('C', 'A', 'D', 'B'), ('C', 'A', 'D', 'E'), ('C', 'A', 'E', 'B'), ('C', 'A', 'E', 'D'), ('C', 'B', 'A', 'D'), ('C', 'B', 'A', 'E'), ('C', 'B', 'D', 'A'), ('C', 'B', 'D', 'E'), ('C', 'B', 'E', 'A'), ('C', 'B', 'E', 'D'), ('C', 'D', 'A', 'B'), ('C', 'D', 'A', 'E'), ('C', 'D', 'B', 'A'), ('C', 'D', 'B', 'E'), ('C', 'D', 'E', 'A'), ('C', 'D', 'E', 'B'), ('C', 'E', 'A', 'B'), ('C', 'E', 'A', 'D'), ('C', 'E', 'B', 'A'), ('C', 'E', 'B', 'D'), ('C', 'E', 'D', 'A'), ('C', 'E', 'D', 'B'), ('D', 'A', 'B', 'C'), ('D', 'A', 'B', 'E'), ('D', 'A', 'C', 'B'), ('D', 'A', 'C', 'E'), ('D', 'A', 'E', 'B'), ('D', 'A', 'E', 'C'), ('D', 'B', 'A', 'C'), ('D', 'B', 'A', 'E'), ('D', 'B', 'C', 'A'), ('D', 'B', 'C', 'E'), ('D', 'B', 'E', 'A'), ('D', 'B', 'E', 'C'), ('D', 'C', 'A', 'B'), ('D', 'C', 'A', 'E'), ('D', 'C', 'B', 'A'), ('D', 'C', 'B', 'E'), ('D', 'C', 'E', 'A'), ('D', 'C', 'E', 'B'), ('D', 'E', 'A', 'B'), ('D', 'E', 'A', 'C'), ('D', 'E', 'B', 'A'), ('D', 'E', 'B', 'C'), ('D', 'E', 'C', 'A'), ('D', 'E', 'C', 'B'), ('E', 'A', 'B', 'C'), ('E', 'A', 'B', 'D'), ('E', 'A', 'C', 'B'), ('E', 'A', 'C', 'D'), ('E', 'A', 'D', 'B'), ('E', 'A', 'D', 'C'), ('E', 'B', 'A', 'C'), ('E', 'B', 'A', 'D'), ('E', 'B', 'C', 'A'), ('E', 'B', 'C', 'D'), ('E', 'B', 'D', 'A'), ('E', 'B', 'D', 'C'), ('E', 'C', 'A', 'B'), ('E', 'C', 'A', 'D'), ('E', 'C', 'B', 'A'), ('E', 'C', 'B', 'D'), ('E', 'C', 'D', 'A'), ('E', 'C', 'D', 'B'), ('E', 'D', 'A', 'B'), ('E', 'D', 'A', 'C'), ('E', 'D', 'B', 'A'), ('E', 'D', 'B', 'C'), ('E', 'D', 'C', 'A'), ('E', 'D', 'C', 'B')]