Given a list, I can get the product of each item in a list as such:
from itertools import product
x = 'apple orange pair None'.split()
[i + ' ' + j for i, j in product(x, x)]
[out]:
['apple apple',
'apple orange',
'apple pair',
'apple None',
'orange apple',
'orange orange',
'orange pair',
'orange None',
'pair apple',
'pair orange',
'pair pair',
'pair None',
'None apple',
'None orange',
'None pair',
'None None']
If I want to nest the output of product(list, list)
with the initial list, I could do:
from itertools import product
x = 'apple orange pair None'.split()
for i, j in product(x, x):
i = '' if i == 'None' else i
j = '' if j == 'None' else j
y = i + ' ' + j
y = y.strip()
print(y)
for k, l in product(x, [y]):
k = '' if k == 'None' else k
l = '' if l == 'None' else l
z = k + ' ' + l
z = z.strip()
print(z)
[out]:
apple apple
apple apple apple
orange apple apple
pair apple apple
apple apple
apple orange
apple apple orange
orange apple orange
pair apple orange
apple orange
apple pair
apple apple pair
orange apple pair
pair apple pair
apple pair
apple
apple apple
orange apple
pair apple
apple
orange apple
apple orange apple
orange orange apple
pair orange apple
orange apple
orange orange
apple orange orange
orange orange orange
pair orange orange
orange orange
orange pair
apple orange pair
orange orange pair
pair orange pair
orange pair
orange
apple orange
orange orange
pair orange
orange
pair apple
apple pair apple
orange pair apple
pair pair apple
pair apple
pair orange
apple pair orange
orange pair orange
pair pair orange
pair orange
pair pair
apple pair pair
orange pair pair
pair pair pair
pair pair
pair
apple pair
orange pair
pair pair
pair
apple
apple apple
orange apple
pair apple
apple
orange
apple orange
orange orange
pair orange
orange
pair
apple pair
orange pair
pair pair
pair
apple
orange
pair
If I want to get to another level of nesting, I could hard code it:
from itertools import product
x = 'apple orange pair None'.split()
for i, j in product(x, x):
i = '' if i == 'None' else i
j = '' if j == 'None' else j
y = i + ' ' + j
y = y.strip()
print(y)
for k, l in product(x, [y]):
k = '' if k == 'None' else k
l = '' if l == 'None' else l
z = k + ' ' + l
z = z.strip()
print(z)
for m, n in product(x, [z]):
m = '' if m == 'None' else m
n = '' if n == 'None' else n
zz = m + ' ' + n
zz = zz.strip()
print(zz)
But is there some other way to achieve the same output without hard coding it?