def main(): print encode("a") == None print encode([]) == [] print encode(["a"]) == [[1, "a"]] print encode(["a", "b"]) == [[1, "a"], [1, "b"]] print encode(["a", "a", "b"]) == [[2, "a"], [1, "b"]] print encode(["a", "a", "b", "b"]) == [[2, "a"], [2, "b"]] print encode(["a", "a", "b", "b", "a"]) == [[2, "a"], [2, "b"], [1, "a"]] print encode(["a", "a", "a", "a", "b", "c", "c", "a", "a", "d", "e", "e", "e", "e"]) == [[4, "a"], [1, "b"], [2, "c"], [2, "a"], [1, "d"], [4, "e"]] def encode(lista): pack_l = pack(lista) return [[len(v), v[0]] for v in pack_l] if pack_l else pack_l 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()