tyrion

flattenProblem.py

Jul 6th, 2012
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.92 KB | None | 0 0
  1. import collections
  2.  
  3. def _flatten(L, M, i):
  4.     if i == len(L):
  5.         return
  6.     if isinstance(L[i], collections.Iterable):
  7.         _flatten(L[i], M, 0)
  8.     else:
  9.         M.append(L[i])
  10.     _flatten(L, M, i+1)
  11.  
  12. # recursive
  13. def flatten(L):
  14.     M = []
  15.     _flatten(L, M, 0)
  16.     return M
  17.  
  18. # iterative
  19. def flatten(L):
  20.     M = []
  21.     Q = [iter(L)]
  22.     while Q:
  23.         L = Q[-1]
  24.         for x in L:
  25.             if isinstance(x, collections.Iterable):
  26.                 Q.append(iter(x))
  27.                 break
  28.             M.append(x)
  29.         else:
  30.             Q.pop()
  31.  
  32.     return M
  33.  
  34. if __name__=="__main__":
  35.     assert(flatten([])==[])
  36.     assert(flatten([[]])==[])
  37.     assert(flatten([0])==[0])
  38.     assert(flatten([0,[1]])==[0,1])
  39.     assert(flatten([0,[1],2])==[0,1,2])
  40.     L=[0,1,[2,3],4,[5]]
  41.     import copy
  42.     M=copy.deepcopy(L)
  43.     assert(flatten(L)==[0,1,2,3,4,5])
  44.     assert(L==M) # input unchanged?
Advertisement
Add Comment
Please, Sign In to add comment