import collections def flatten1(seq): """Returns a list containing all the items in seq with no nested sequences >>> a = [[1, 2], [3, [4, [5, 6], 7], 8], 9, [10, 11], [12]] >>> b =flatten1(a) >>> b [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] >>> flatten1(b) == b True >>> c = [["S"] * 4, ["M"] * 2, "R", "H", ["D"] * 3, "A", "B", "E"] >>> flatten1(c) ['S', 'S', 'S', 'S', 'M', 'M', 'R', 'H', 'D', 'D', 'D', 'A', 'B', 'E'] """ result = [] for x in seq: if isinstance(x, list): result.extend(flatten1(x)) else: result.append(x) return result def flatten2(seq): """Returns a list containing all the items in seq with no nested sequences >>> a = [[1, 2], [3, [4, [5, 6], 7], 8], 9, [10, 11], [12]] >>> b =flatten2(a) >>> b [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] >>> flatten2(b) == b True >>> c = [["S"] * 4, ["M"] * 2, "R", "H", ["D"] * 3, "A", "B", "E"] >>> flatten2(c) ['S', 'S', 'S', 'S', 'M', 'M', 'R', 'H', 'D', 'D', 'D', 'A', 'B', 'E'] """ result = [] for x in seq: if isinstance(x, collections.Sequence): result.extend(flatten2(x)) else: result.append(x) return result if __name__ == "__main__": import doctest doctest.testmod()