Hi all. I'm just starting to pick up python. I wanted to play with nested
lists so first I wrote a little bit of code to create arbitrarily nested
lists (grow). Then I wrote a breadth first search.  I'm putting this small
snippet up asking for criticism. Was there a more elegant way to do what I'm
doing? Anything that goes against convention?  Anything that fingers me as a
c++ programmer? Are there standard modules that do these kind of things? 
Thanks for any feedback.

##############################
from random import randint

Val = 0

def grow(L,depth):
   '''grows L by appending integers and arbitrarily nested lists with a
maximum
   depth. Returns L.'''
   global Val
   if depth == 0:
      return L
   else:
      choice = randint(1,2)
      if 1 == choice:
         # add a numerical literal
         Val += 1
         L.append(Val)
         return grow(L,depth-1)
      elif 2 == choice:
         # add a list
         L.append( grow([],depth-1) )
         return grow(L,depth-1)
      
def traverse(L, count=0):
   '''Prints the non iterable object of L in breadth first order.
   Returns count + the number of non iterables in L.'''
   if L == []:
      return count
   n = []
   for e in L:
      if not hasattr(e,'__iter__'):
         print e,
         count += 1
      else:
         n[:] += e         
   print '\n'
   return traverse(n,count)
   
L = grow([],10)
C = traverse(L)
##############################


--
Zack

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

Reply via email to