##########################################################"""Flattening a Nested Sequence"""from __future__ import generatorsdef 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 resultdef flatten22(sequence, scalarp): for item in sequence: if scalarp(item): yield item else: for subitem in flatten22(item, scalarp): yield subitemdef canLoopOver(maybeIterable): try: iter(maybeIterable) except: return 0 else: return 1def canLoopOver22(maybeIterable): try: for x in maybeIterable: return 1 else: return 1 except: return 0def isStringLike(obj): try: obj+'' except TypeError: return 0 else: return 1def 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]ab3123>>>