[Tutor] recursive problem

Luke Paireepinart rabidpoobear at gmail.com
Thu Sep 9 16:26:17 CEST 2010


Shouldn't there be a way to do this without type checking? Duck typing!

Sent from my iPhone

On Sep 9, 2010, at 7:33 AM, Joel Goldstick <joel.goldstick at gmail.com> wrote:

> 
> 
> On Thu, Sep 9, 2010 at 7:59 AM, Shashwat Anand <anand.shashwat at gmail.com> wrote:
> 
> 
> On Thu, Sep 9, 2010 at 3:11 PM, Roelof Wobben <rwobben at hotmail.com> wrote:
> 
>  
> From: anand.shashwat at gmail.com
> Date: Thu, 9 Sep 2010 15:08:10 +0530
> Subject: Re: [Tutor] recursive problem
> To: rwobben at hotmail.com
> CC: tutor at python.org
> 
> 
> 
> On Thu, Sep 9, 2010 at 2:21 PM, Roelof Wobben <rwobben at hotmail.com> wrote:
> Hello, 
>  
> I have this :
>  
> def recursive_count(target, nested_num_list):
>     """
>       >>> recursive_count(2, [2, 9, [2, 1, 13, 2], 8, [2, 6]])
>       4
>       >>> recursive_count(7, [[9, [7, 1, 13, 2], 8], [7, 6]])
>       2
>       >>> recursive_count(15, [[9, [7, 1, 13, 2], 8], [2, 6]])
>       0
>       >>> recursive_count(5, [[5, [5, [1, 5], 5], 5], [5, 6]])
>       6
>     """
>     for element in nested_num_list:
>         if type(element) == type([]):
>            test = recursive_count(target, element)
>         print element, target
>         if element == target :
>            count = count + 1
>     return count
>  
> if __name__ == "__main__":
>     import doctest
>     doctest.testmod()
> 
> What you are trying to do is walk through the list.  If you get a value and not another list, check if it is the value you are counting.  If it is, added it to your count.
> When you are done walking, return  your count.  If you get another list, walk through the list 
> So here is my stab at the code 
>  14   count = 0                                                                           # set your count to 0
>  15     for element in nested_num_list:                                         # walk through each element
>  16         if type(element) == type([]):
>  17             count += recursive_count(target, element)                  # since its another list start anew and add the count result to what you already have
>  18         elif element == target:                                                   # its a value, so check if its YOUR value, and if it is, increment your counter
>  19                 count += 1
>  20                 #print element, count
>  21     return count                                                                     # must be done.  You get here each time you walk thru a list
>  22 
> 
>  
>  
> Now I get this message :
>  
> UnboundLocalError: local variable 'count' referenced before assignment
> 
> It is because you are doing count = count + 1
> But where is count defined.
>  
>  
> But if I do this :
>  
> def recursive_count(target, nested_num_list):
>     """
>       >>> recursive_count(2, [2, 9, [2, 1, 13, 2], 8, [2, 6]])
>       4
>       >>> recursive_count(7, [[9, [7, 1, 13, 2], 8], [7, 6]])
>       2
>       >>> recursive_count(15, [[9, [7, 1, 13, 2], 8], [2, 6]])
>       0
>       >>> recursive_count(5, [[5, [5, [1, 5], 5], 5], [5, 6]])
>       6
>     """
>   count = 0 
>   for element in nested_num_list:
>         if type(element) == type([]):
>            test = recursive_count(target, element)
>         print element, target
>         if element == target :
>            count = count + 1
>     return count
>  
> if __name__ == "__main__":
>     import doctest
>     doctest.testmod()
>  
> The count will always be 0 if a nested list is being found.
>  
> What's the python way to solve this 
> 
> I am not sure what do you want to achieve by this ?
> What is the problem statement ?
>  
> The problem statement is that I must count how many times the target is in the nested_list.
> So I thougt that every nested list the function is called again so this list is also iterated.
> 
> Let's say n, l = 2, [2, 9, [2, 1, 13, 2], 8, [2, 6]]
> Simply Flatten the list l, which will be then be; flatten(l) = [ 2, [2, 9, 2, 1,13, 2, 8, 2, 6 ]
> Now count for n; flatten.count(n)
> 
> 
> 
> -- 
> ~l0nwlf
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
> 
> 
> 
> 
> -- 
> Joel Goldstick
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100909/0935cbab/attachment.html>


More information about the Tutor mailing list