#
#########################################################
""" Flattening a Nested Sequence
"""
from __future__ import generators
def flatten(sequence, scalarp, result = None):
if result is None: result = []
for item in sequence:
if scalarp(item): result.append(item)
else : flatten(item, scalarp, result)
return result
def flatten22(sequence, scalarp):
for item in sequence:
if scalarp(item):
yield item
else :
for subitem in flatten22(item, scalarp):
yield subitem
def canLoopOver(maybeIterable):
try :
iter(maybeIterable)
except :
return 0
else :
return 1
def canLoopOver22(maybeIterable):
try :
for x in maybeIterable:
return 1
else :
return 1
except :
return 0
def isStringLike(obj):
try : obj + ''
except TypeError: return 0
else : return 1
def isScalar(obj):
return isStringLike(obj) or not canLoopOver(obj)
seq1 = [[ ' a ' , ' b ' , { 3 : 3 }], [ 1 , 2 ], 3 ]
print flatten(seq1, isScalar)
for avariable in flatten22(seq1, isScalar):
print avariable
# #######################################################
the output is:
>>>
['a', 'b', 3, 1, 2, 3]
a
b
3
1
2
3
>>>
""" Flattening a Nested Sequence
"""
from __future__ import generators
def flatten(sequence, scalarp, result = None):
if result is None: result = []
for item in sequence:
if scalarp(item): result.append(item)
else : flatten(item, scalarp, result)
return result
def flatten22(sequence, scalarp):
for item in sequence:
if scalarp(item):
yield item
else :
for subitem in flatten22(item, scalarp):
yield subitem
def canLoopOver(maybeIterable):
try :
iter(maybeIterable)
except :
return 0
else :
return 1
def canLoopOver22(maybeIterable):
try :
for x in maybeIterable:
return 1
else :
return 1
except :
return 0
def isStringLike(obj):
try : obj + ''
except TypeError: return 0
else : return 1
def isScalar(obj):
return isStringLike(obj) or not canLoopOver(obj)
seq1 = [[ ' a ' , ' b ' , { 3 : 3 }], [ 1 , 2 ], 3 ]
print flatten(seq1, isScalar)
for avariable in flatten22(seq1, isScalar):
print avariable
# #######################################################
the output is:
>>>
['a', 'b', 3, 1, 2, 3]
a
b
3
1
2
3
>>>