def main(): print pack("a") == None print pack([]) == [] print pack(["a"]) == [["a"]] print pack(["a", "b"]) == [["a"], ["b"]] print pack(["a", "a", "b"]) == [["a", "a"], ["b"]] print pack(["a", "a", "b", "b"]) == [["a","a"], ["b", "b"]] print pack(["a", "a", "b", "b", "a"]) == [["a", "a"], ["b", "b"], ["a"]] print pack(["a", "a", "a", "a", "b", "c", "c", "a", "a", "d", "e", "e", "e", "e"]) == [["a", "a", "a", "a"], ["b"], ["c", "c"], ["a", "a"], ["d"], ["e", "e", "e", "e"]] def pack(lista): return reduce(appender2pack, lista, []) if isinstance(lista, list) else None def appender2pack(l, v): if l: if v in l[-1]: l[-1].append(v) else: l.append([v]) else: l.append([v]) return l if __name__ == "__main__": main()