On 26/09/2013 00:24, Arturo B wrote:
Hi, I'm doing Python exercises and I need to write a function to flat nested 
lists
as this one:

[[1,2,3],4,5,[6,[7,8]]]

To the result:

[1,2,3,4,5,6,7,8]

So I searched for example code and I found this one that uses recursion (that I 
don't understand):

def flatten(l):
     ret = []
     for i in l:
         if isinstance(i, list) or isinstance(i, tuple):
             ret.extend(flatten(i)) #How is flatten(i) evaluated?
         else:
             ret.append(i)
     return ret

So I know what recursion is, but I don't know how is

                        flatten(i)

evaluated, what value does it returns?

Try a simpler version first:

def flatten(l):
    ret = []
    for i in l:
        if isinstance(i, list) or isinstance(i, tuple):
            # Append the contents of the item.
            ret.extend(i)
        else:
            # Append the item itself.
            ret.append(i)
    return ret

In this example, flatten([[1,2,3],4,5,[6,[7,8]]]) returns [1,2,3,4,5,6,
[7,8]].

The problem here is that a sublist can itself contain a list.

It would be nice if there were a function which, when given [6,[7,8]],
would return [6,7,8] so that you could append those items.

But that's exactly what flatten does!

Try adding prints to tell you what was passed in and what is returned.

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to