def flatten1(lis): ret=[] def f(lis): for item in lis: if isinstance(item,list): f(item) else: ret.append(item) f(lis) return ret def flatten2(lis): ret=[] for item in lis: if not isinstance(item,list): ret.append(item) else: ret.extend(flatten2(item)) return ret def flatten3(lis): for item in lis: if isinstance(item,list): for i in flatten3(item): yield i else: yield item a=[1,[2,3],[4,[5,6],7]] print(flatten1(a)) print(flatten2(a)) print(list(flatten3(a)))