from __future__ import generators
defcanLoopOver(maybeIterable):
try:
iter(maybeIterable)
except:
return0else:
return1defisScalar(item):
returnnot canLoopOver(item)
defflatten(sequence, scalarp=isScalar, result=None):
if result isNone: result = []
for item in sequence:
if scalarp(item):
result.append(item)
else:
flatten(item, scalarp, result)
return result
defflattenGenerator(sequence, scalarp=isScalar):
for item in sequence:
if scalarp(item):
yield item
else:
for subitem in flatten(item, scalarp):
yield subitem
if __name__=='__main__':
t = [[1,2,3],[3,4,5]]
print flatten(t)