def flatten1(l, newlist): if isinstance(l, list): for i in l: flatten1(i, newlist) else: newlist.append(l) def flatten2(l): if isinstance(l, list): newlist = [] for i in l: newlist = newlist + flatten2(i) return newlist else: return [l] def flatten3(l): if not l: return l if not isinstance(l, list): return [l] return flatten3(l[0]) + flatten3(l[1:]) if __name__ == '__main__': l = [1, [2, 3], 4, [[5]], [], [[]], [6, 7, [8]]] newlist = [] flatten1(l, newlist) print newlist print flatten2(l) print flatten3(l)
The output:
[1, 2, 3, 4, 5, 6, 7, 8] [1, 2, 3, 4, 5, 6, 7, 8] [1, 2, 3, 4, 5, 6, 7, 8]
The first algorithm is a ugly since it requires a newlist parameter to be passed in. The second one is a bit better but it still requires a loop. The third one doesn't require any loop and is the shortest one.
No comments:
Post a Comment