<html><body bgcolor="#FFFFFF"><div>Shouldn't there be a way to do this without type checking? Duck typing!<br><br>Sent from my iPhone</div><div><br>On Sep 9, 2010, at 7:33 AM, Joel Goldstick &lt;<a href="mailto:joel.goldstick@gmail.com">joel.goldstick@gmail.com</a>&gt; wrote:<br><br></div><div></div><blockquote type="cite"><div><br><br><div class="gmail_quote">On Thu, Sep 9, 2010 at 7:59 AM, Shashwat Anand <span dir="ltr">&lt;<a href="mailto:anand.shashwat@gmail.com"><a href="mailto:anand.shashwat@gmail.com">anand.shashwat@gmail.com</a></a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br><br><div class="gmail_quote"><div><div></div><div class="h5">On Thu, Sep 9, 2010 at 3:11 PM, Roelof Wobben <span dir="ltr">&lt;<a href="mailto:rwobben@hotmail.com" target="_blank"><a href="mailto:rwobben@hotmail.com">rwobben@hotmail.com</a></a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">





<div>
<br>&nbsp;<br>
<hr>
From: <a href="mailto:anand.shashwat@gmail.com" target="_blank"><a href="mailto:anand.shashwat@gmail.com">anand.shashwat@gmail.com</a></a><br>Date: Thu, 9 Sep 2010 15:08:10 +0530<br>Subject: Re: [Tutor] recursive problem<br>To: <a href="mailto:rwobben@hotmail.com" target="_blank"><a href="mailto:rwobben@hotmail.com">rwobben@hotmail.com</a></a><br>


CC: <a href="mailto:tutor@python.org" target="_blank"><a href="mailto:tutor@python.org">tutor@python.org</a></a><br><br><br><br>
<div><div><div></div><div>On Thu, Sep 9, 2010 at 2:21 PM, Roelof Wobben <span dir="ltr">&lt;<a href="mailto:rwobben@hotmail.com" target="_blank"><a href="mailto:rwobben@hotmail.com">rwobben@hotmail.com</a></a>&gt;</span> wrote:<br>
<blockquote style="padding-left: 1ex;">
<div>Hello, <br>&nbsp;<br>I have this :<br>&nbsp;<br>def recursive_count(target, nested_num_list):<br>&nbsp;&nbsp;&nbsp; """<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; recursive_count(2, [2, 9, [2, 1, 13, 2], 8, [2, 6]])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; recursive_count(7, [[9, [7, 1, 13, 2], 8], [7, 6]])<br>


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; recursive_count(15, [[9, [7, 1, 13, 2], 8], [2, 6]])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; recursive_count(5, [[5, [5, [1, 5], 5], 5], [5, 6]])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6<br>&nbsp;&nbsp;&nbsp; """<br>&nbsp;&nbsp;&nbsp; for element in nested_num_list:<br>


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if type(element) == type([]):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test = recursive_count(target, element)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print element, target<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if element == target :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count = count + 1<br>&nbsp;&nbsp;&nbsp; return count<br>&nbsp;<br>if __name__ == "__main__":<br>


&nbsp;&nbsp;&nbsp; import doctest<br>&nbsp;&nbsp;&nbsp; doctest.testmod()<br></div></blockquote></div></div></div></div></blockquote></div></div></div></blockquote><div><br>What you are trying to do is walk through the list.&nbsp; If you get a value and not another list, check if it is the value you are counting.&nbsp; If it is, added it to your count.<br>
When you are done walking, return&nbsp; your count.&nbsp; If you get another list, walk through the list <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="gmail_quote"><div><div class="h5"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><div><div><div><blockquote style="padding-left: 1ex;">
<div>So here is my stab at the code <br></div></blockquote></div></div></div></div></blockquote></div></div></div></blockquote><div>&nbsp;14 &nbsp; count = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # set your count to 0<br>
&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp; for element in nested_num_list:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # walk through each element<br>&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if type(element) == type([]):<br>&nbsp;17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count += recursive_count(target, element)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # since its another list start anew and add the count result to what you already have<br>
&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif element == target:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # its a value, so check if its YOUR value, and if it is, increment your counter<br>&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count += 1<br>&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #print element, count<br>
&nbsp;21&nbsp;&nbsp;&nbsp;&nbsp; return count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # must be done.&nbsp; You get here each time you walk thru a list<br>&nbsp;22 <br><br>&nbsp;</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="gmail_quote"><div><div class="h5"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><div><div><div><blockquote style="padding-left: 1ex;">
<div>&nbsp;<br>Now I get this message :<br>&nbsp;<br><font size="2">UnboundLocalError: local variable 'count' referenced before assignment<br></font></div></blockquote>
<div><br>It is because you are doing count = count + 1<br>But where is count defined.<br>&nbsp;<br></div>
<blockquote style="padding-left: 1ex;">
<div><font size="2">&nbsp;<br>But if I do this :<br>&nbsp;<br>def recursive_count(target, nested_num_list):<br>&nbsp;&nbsp;&nbsp; """<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; recursive_count(2, [2, 9, [2, 1, 13, 2], 8, [2, 6]])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; recursive_count(7, [[9, [7, 1, 13, 2], 8], [7, 6]])<br>


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; recursive_count(15, [[9, [7, 1, 13, 2], 8], [2, 6]])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; recursive_count(5, [[5, [5, [1, 5], 5], 5], [5, 6]])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6<br>&nbsp;&nbsp;&nbsp; """<br>&nbsp;&nbsp;count = 0 <br>


&nbsp; for element in nested_num_list:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if type(element) == type([]):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test = recursive_count(target, element)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print element, target<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if element == target :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count = count + 1<br>


&nbsp;&nbsp;&nbsp; return count<br>&nbsp;<br>if __name__ == "__main__":<br>&nbsp;&nbsp;&nbsp; import doctest<br>&nbsp;&nbsp;&nbsp; doctest.testmod()<br>&nbsp;<br>The count will always be 0 if a nested list is being found.<br>&nbsp;<br>What's the python way to solve this <br>


</font></div></blockquote>
<div><br>I am not sure what do you want to achieve by this ?<br>What is the problem statement ?</div>
<div>&nbsp;</div>
</div></div><div>The problem statement is that I must count how many times the target is in the nested_list.</div>
<div>So I thougt that every nested list the function is called again so this list is also iterated.</div></div></div></blockquote></div></div><div><br>Let's say n, l = 2, [2, 9, [2, 1, 13, 2], 8, [2, 6]]<br>Simply Flatten the list l, which will be then be; flatten(l) = [ 2, [2, 9, 2, 1,13, 2, 8, 2, 6 ]<br>


Now count for n; flatten.count(n)<br><br><br> </div></div><br>-- <br>~l0nwlf<br>
<br>_______________________________________________<br>
Tutor maillist &nbsp;- &nbsp;<a href="mailto:Tutor@python.org"><a href="mailto:Tutor@python.org">Tutor@python.org</a></a><br>
To unsubscribe or change subscription options:<br>
<a href="http://mail.python.org/mailman/listinfo/tutor" target="_blank"><a href="http://mail.python.org/mailman/listinfo/tutor">http://mail.python.org/mailman/listinfo/tutor</a></a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Joel Goldstick<br><br>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>Tutor maillist &nbsp;- &nbsp;<a href="mailto:Tutor@python.org"><a href="mailto:Tutor@python.org">Tutor@python.org</a></a></span><br><span>To unsubscribe or change subscription options:</span><br><span><a href="http://mail.python.org/mailman/listinfo/tutor">http://mail.python.org/mailman/listinfo/tutor</a></span><br></div></blockquote></body></html>