您的位置:首页 > 其它

code fragment One from

2007-08-25 22:07 369 查看

##########################################################


"""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
>>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: