Skip to content

Instantly share code, notes, and snippets.

@suzaku
Created April 13, 2016 03:33
Show Gist options
  • Select an option

  • Save suzaku/46748559ac0df37f3bc6b5998e0585f5 to your computer and use it in GitHub Desktop.

Select an option

Save suzaku/46748559ac0df37f3bc6b5998e0585f5 to your computer and use it in GitHub Desktop.
from collections import deque
def flatten(list_):
return list(iflatten(list_))
def iflatten(list_):
seen = set()
list_ = deque(list_)
while list_:
item = list_.popleft()
if isinstance(item, list):
if id(item) in seen:
raise TypeError
else:
seen.add(id(item))
while item:
list_.appendleft(item.pop())
else:
yield item
if __name__ == '__main__':
print(flatten([[1, 2, [3]], [4, [5]]]))
def flatten(list_):
return list(iflatten(list_))
def iflatten(list_, seen=None):
if seen is None:
seen = set()
if id(list_) in seen:
raise TypeError
else:
seen.add(id(list_))
for i in list_:
if isinstance(i, list):
yield from iflatten(i, seen)
else:
yield i
if __name__ == '__main__':
print(flatten([[1, 2, [3]], [4, [5]]]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment