Search code examples
pythonlistpython-itertools

All possible combinations of list elements in Python


I have a list B containing elements. I want to create all possible pairs using these elements as shown in the expected output. But I am getting an error. How do I fix it?

import numpy as np
import itertools

B=[ 1,  2,  5,  7, 10, 11]
combination=[]  

for L in range(len(B) + 1):
    for subset in itertools.combinations(B, L):
        combination.append([list(sub) for sub in subset])
combination 

The error is

in <listcomp>
    combination.append([list(sub) for sub in subset])

TypeError: 'int' object is not iterable

The expected output is

[1,2],[1,5],[1,7],[1,10],[1,11],
[2,1],[2,5],[2,7],[2,10],[2,11],
[5,1],[5,2],[5,7],[5,10],[5,11],
[7,1],[7,2],[7,5],[7,10],[7,11],
[10,1],[10,2],[10,5],[10,7],[10,11],
[11,1],[11,2],[11,5],[11,7],[11,10]

Solution

  • What you are looking for is not combinations but permutations:

    >>> list(itertools.permutations(B, 2))
    [(1, 2),
     (1, 5),
     (1, 7),
     (1, 10),
     (1, 11),
     (2, 1),
     (2, 5),
     (2, 7),
     (2, 10),
     (2, 11),
     (5, 1),
     (5, 2),
     (5, 7),
     (5, 10),
     (5, 11),
     (7, 1),
     (7, 2),
     (7, 5),
     (7, 10),
     (7, 11),
     (10, 1),
     (10, 2),
     (10, 5),
     (10, 7),
     (10, 11),
     (11, 1),
     (11, 2),
     (11, 5),
     (11, 7),
     (11, 10)]
    

    To convert to a list:

    # List comprehension
    perm = [list(p) for p in itertools.permutations(B, 2)
    
    # Functional programming
    perm = list(map(list, itertools.permutations(B, 2)))