def encode_direct(lista):
def padd(p, v):
if not p or not v in p[-1]:
p.append(v)
else:
if isinstance(p[-1], list):
p[-1][0] += 1
else:
p[-1] = [2, v]
return p
return reduce(padd, lista, []) if isinstance(lista, list) else None
if __name__ == "__main__":
print encode_direct("a") == None
print encode_direct([]) == []
print encode_direct(["a"]) == ["a"]
print encode_direct(["a", "b"]) == ["a", "b"]
print encode_direct(["a", "a", "b"]) == [[2, "a"], "b"]
print encode_direct(["a", "a", "b", "b"]) == [[2, "a"], [2, "b"]]
print encode_direct(["a", "a", "b", "b", "a"]) == [[2, "a"], [2, "b"], "a"]
print encode_direct(["a", "a", "a", "a", "b", "c", "c", "a", "a", "d", "e", "e", "e", "e"]) == [[4, "a"], "b", [2, "c"], [2, "a"], "d", [4, "e"]]