Advertisement
Guest User

Untitled

a guest
Apr 21st, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. import sys
  2. from collections import deque
  3.  
  4.  
  5. def flatten(nested_list):
  6. """Flatten a list of nested lists of integers into a flat list of integers."""
  7. result = []
  8. nested_deque = deque(nested_list)
  9.  
  10. while nested_deque:
  11. sublist = nested_deque.popleft()
  12.  
  13. if isinstance(sublist, list):
  14. nested_deque.extendleft(reversed(sublist))
  15. else:
  16. result.append(sublist)
  17. return result
  18.  
  19.  
  20. if __name__ == "__main__":
  21. assert flatten([]) == []
  22. assert flatten([1]) == [1]
  23. assert flatten([1, 2]) == [1, 2]
  24. assert flatten([1, [2]]) == [1, 2]
  25. assert flatten([1, [2, [3]]]) == [1, 2, 3]
  26. assert flatten([[[[1]]], [[[2]]], [[[3]]]]) == [1, 2, 3]
  27.  
  28. # verify a list with depth greater than python's recursion limit
  29. # recursive flattening wouldn't pass this test:
  30. deeply_nested_list = [1, 2, 3]
  31. for i in range(sys.getrecursionlimit() + 1):
  32. deeply_nested_list[0] = [deeply_nested_list[0]]
  33. assert flatten(deeply_nested_list) == [1, 2, 3]
  34.  
  35. # long nested list:
  36. assert flatten([[[[[i]]]] for i in range(100000)]) == list(range(100000))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement