Chris Rebert wrote: > On Mon, Dec 15, 2008 at 11:06 AM, Reckoner <recko...@gmail.com> wrote: >> Hi, >> >> I have lists of the following type: >> >> [1,2,3,[5,6]] >> >> and I want to produce the following strings from this as >> >> '0-1-2-3-5' >> '0-1-2-3-6' >> >> That was easy enough. The problem is that these can be nested. For >> example: >> >> [1,2,3,[5,6],[7,8,9]] >> >> which should produce >> >> '0-1-2-3-5-7' >> '0-1-2-3-5-8' >> '0-1-2-3-5-9' >> '0-1-2-3-6-7' >> '0-1-2-3-6-8' >> '0-1-2-3-6-9' >> >> also, >> >> [1,2,3,[5,6],7,[9]] >> >> should produce >> >> '0-1-2-3-5-7-9' >> '0-1-2-3-6-7-9' >> >> obviously, these are nested loops over the lists. The problem is that >> I don't know ahead of time how many lists there are or how deep they >> go. In other words, you could have: >> >> [1,2,3,[5,6,[10, 11]],7,[9,[1, 2, 3, 4, 5 ]]] >> >> Any help appreciated. I've really been having trouble with this. >> >> I hope that made sense. > > You just need a recursive list-flattening function. There are many > recipes for these. Here's mine: > > def flatten(lst): > if isinstance(lst, list): > result = [] > for item in lst: > result += flatten(item) > return result > else: > return [lst] > >>>> flattened = flatten([1,2,3,[5,6,[10, 11]],7,[9,[1, 2, 3, 4, 5 ]]]) >>>> flattened > [1, 2, 3, 5, 6, 10, 11, 7, 9, 1, 2, 3, 4, 5] >>>> '-'.join(str(num) for num in flattened) > '1-2-3-5-6-10-11-7-9-1-2-3-4-5' > Read the problem description again ...
regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC http://www.holdenweb.com/ -- http://mail.python.org/mailman/listinfo/python-list