Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- from collections import deque
- def flatten(nested_list):
- """Flatten a list of nested lists of integers into a flat list of integers."""
- result = []
- nested_deque = deque(nested_list)
- while nested_deque:
- sublist = nested_deque.popleft()
- if isinstance(sublist, list):
- nested_deque.extendleft(reversed(sublist))
- else:
- result.append(sublist)
- return result
- if __name__ == "__main__":
- assert flatten([]) == []
- assert flatten([1]) == [1]
- assert flatten([1, 2]) == [1, 2]
- assert flatten([1, [2]]) == [1, 2]
- assert flatten([1, [2, [3]]]) == [1, 2, 3]
- assert flatten([[[[1]]], [[[2]]], [[[3]]]]) == [1, 2, 3]
- # verify a list with depth greater than python's recursion limit
- # recursive flattening wouldn't pass this test:
- deeply_nested_list = [1, 2, 3]
- for i in range(sys.getrecursionlimit() + 1):
- deeply_nested_list[0] = [deeply_nested_list[0]]
- assert flatten(deeply_nested_list) == [1, 2, 3]
- # long nested list:
- assert flatten([[[[[i]]]] for i in range(100000)]) == list(range(100000))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement