[Tutor] recursive problem

Joel Goldstick joel.goldstick at gmail.com
Thu Sep 9 14:33:09 CEST 2010


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100909/9732aa65/attachment-0001.html>


More information about the Tutor mailing list