Given a list with some elements being a list of optional elements. The task is to find all the possible combinations from all options.
Examples:
Input: test_list = [1,2,3]
Output:
[1], [1, 2], [1, 2, 3], [1, 3]
[2], [2, 3], [3]
Example 1: Get all possible combinations of a list’s elements using combinations
Python3
from itertools import combinations
# initializing list test_list = [ "GFG" , [ 5 , 4 ], "is" ,
[ "best" , "good" , "better" , "average" ]]
idx = 0
temp = combinations(test_list, 2 )
for i in list (temp):
idx = idx + 1
print ( "Combination" , idx, ": " , i)
|
Output:
Combination 1 : ('GFG', [5, 4]) Combination 2 : ('GFG', 'is') Combination 3 : ('GFG', ['best', 'good', 'better', 'average']) Combination 4 : ([5, 4], 'is') Combination 5 : ([5, 4], ['best', 'good', 'better', 'average']) Combination 6 : ('is', ['best', 'good', 'better', 'average'])
Example 2: Get all possible combinations of a list’s elements using combinations_with_replacement
Python3
from itertools import combinations_with_replacement
# initializing list test_list = [ "GFG" , [ 5 , 4 ], "is" ,
[ "best" , "good" , "better" , "average" ]]
idx = 0
temp = combinations_with_replacement(test_list, 2 )
for i in list (temp):
idx = idx + 1
print ( "Combination" , idx, ": " , i)
|
Output:
Combination 1 : ('GFG', 'GFG') Combination 2 : ('GFG', [5, 4]) Combination 3 : ('GFG', 'is') Combination 4 : ('GFG', ['best', 'good', 'better', 'average']) Combination 5 : ([5, 4], [5, 4]) Combination 6 : ([5, 4], 'is') Combination 7 : ([5, 4], ['best', 'good', 'better', 'average']) Combination 8 : ('is', 'is') Combination 9 : ('is', ['best', 'good', 'better', 'average']) Combination 10 : (['best', 'good', 'better', 'average'], ['best', 'good', 'better', 'average'])
Example 3: Get all possible combinations of a list’s elements using loop
In this, we use a nested loop to get index wise combinations from each nested option list, and then the outer loop is used to get default values in all combinations.
Python3
def combinations(iterable, r):
pool = tuple (iterable)
n = len (pool)
if r > n:
return
indx = list ( range (r))
yield tuple (pool[i] for i in indx)
while True :
for i in reversed ( range (r)):
if indx[i] ! = i + n - r:
break
else :
return
indx[i] + = 1
for j in range (i + 1 , r):
indx[j] = indx[j - 1 ] + 1
yield tuple (pool[i] for i in indx)
x = [ 2 , 3 , 1 , 6 , 4 , 7 ]
for i in combinations(x, 2 ):
print (i)
|
Output:
(2, 3) (2, 1) (2, 6) (2, 4) (2, 7) (3, 1) (3, 6) (3, 4) (3, 7) (1, 6) (1, 4) (1, 7) (6, 4) (6, 7) (4, 7)
Example 4: Get all possible combinations of a list’s elements using recursion
Python3
import copy
def combinations(target, data):
for i in range ( len (data)):
new_lis = copy.copy(target)
new_data = copy.copy(data)
# print(new_lis, new_data) new_lis.append(data[i])
new_data = data[i + 1 :]
print (new_lis)
combinations(new_lis,
new_data)
target = []
data = [ 1 , 2 , 3 , 4 ]
combinations(target, data) |
Output:
(2, 3) (2, 1) (2, 6) (2, 4) (2, 7) (3, 1) (3, 6) (3, 4) (3, 7) (1, 6) (1, 4) (1, 7) (6, 4) (6, 7) (4, 7)