Split list recursively until flat
The itertools.product()
function might be useful. If we assume that the recursion will only be 1 level deep (aces don't have nested lists themselves), then we could use the following:
from itertools import product
hand = [[1, 14], 2, 3, [1, 14], 7]
aces = [x for x in hand if isinstance(x, list)]
rest = [x for x in hand if isinstance(x, int)]
combinations = [list(x) + rest for x in product(*aces)]
print(combinations)
Yields:
[[1, 1, 2, 3, 7], [1, 14, 2, 3, 7], [14, 1, 2, 3, 7], [14, 14, 2, 3, 7]]
Well, there is an easier way to do this:
from itertools import product
product(*[i if isinstance(i, list) else [i] for i in hand])
I challenge everybody to come up with a simpler solution