毎日Learning

学んだことを共有します

P09 (**) リストの重複する要素をそれぞれ子リストとしてまとめる。

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()