[Chicago] Resolving lists within lists within lists within .....

Robare, Phillip (TEKSystems) proba at allstate.com
Thu Feb 18 19:48:19 EST 2016


Aaron, unlike Massimo’s elegant one-liner you don’t check that what you are iterating over is a list.  Since Python will happily iterate over strings, dictionaries, and much more you quickly get into problems when the list includes more types than lists and numbers.  I recount this from experience when I tried to throw together a flatten routine and pass it a data structure that I got from loading a JSON string.

Phil Robare

<snip/>

On Thu, Feb 18, 2016 at 1:43 PM, Aaron Elmquist <elmq0022 at umn.edu<mailto:elmq0022 at umn.edu>> wrote:
Douglas,
Here's one more version for you and the rest of the list. It's based on Brad's code.  I will let you think about why this version might be better or worse.  Also, recursion is great.  It's just too bad it's not one of python's strong points.

def flatten(lst):
    for item1 in lst:
        if hasattr(item1, '__iter__'):
            for item2 in flatten(item1):
                yield item2
        else:
            yield item1

print([x for x in flatten([1, [2,3,[4,5,6,[7,8,9]]]]) if x%2 == 1])

y = flatten([1, [2,3,[4,5,6,[7,8,9]]]])

print(next(y))
print(next(y))
print(next(y))
.
.
.
<snip/>
On Wed, Feb 17, 2016 at 9:48 PM, DiPierro, Massimo <MDiPierro at cs.depaul.edu<mailto:MDiPierro at cs.depaul.edu>> wrote:
here is a one liner:

def flatten(x):
    return [z for y in x for z in flatten(y)] if isinstance(x,list) else [x]


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/chicago/attachments/20160219/72fb55b6/attachment.html>


More information about the Chicago mailing list