tricky nested list unpacking problem
bearophileHUGS at lycos.com
bearophileHUGS at lycos.com
Mon Dec 15 18:24:13 EST 2008
Arnaud Delobelle:
> Here is a not thought out solution:
>...
I was waiting to answer because so far I have found a bad-looking
solution only. Seeing there's only your solution, I show mine too. It
seems similar to your one.
def xflatten(seq):
if isinstance(seq, list):
stack = [iter(seq)]
while stack:
for item in stack[-1]:
if isinstance(item, list):
stack.append(iter(item))
break
yield item
else:
stack.pop()
else:
yield seq
def product(pools):
if isinstance(pools, list):
result = [[]]
for pool in pools:
if isinstance(pool, list):
result = [x+[y] for x in result for y in xflatten(list
(product(pool)))]
else:
result = [x+[pool] for x in result]
for prod in result:
yield prod
else:
yield pools
s1 = [1,[2, 3, 4], 5,[6, 7]]
s2 = [1,[2, [3, 4]], 5,[6,7],8,[9]]
s3 = [1,2,3,[4,5,[6, 7]],8,[9,[10, 11, 12, 13, 14]]]
def stringify(seq):
for el in product(seq):
yield "0-" + "-".join(map(str, el))
for seq in [s1, s2, s3]:
for txt in stringify(seq):
print txt
print
It's ugly, I agree.
No much tested.
*surely* there are shorter and much nicer solutions.
It reminds me the exercises of the "Little Schemer" :-)
Bye,
bearophile
More information about the Python-list
mailing list