pythonでflatten
def flatten(ls): """ >>> flatten([1, [2, 3], [4], 5, [6, [7]]]) [1, 2, 3, 4, 5, 6, 7] """ return sum((flatten(i) for i in ls), []) if isinstance(ls, list) else [ls]
大して変わらないと思うけど、flatten化するgeneratorをsumするのと、reduceするのとどっちが効率がいいのだろうか?
def flatten(ls): if not isinstance(ls, list): return [ls] return reduce(lambda s, i: s + flatten(i), ls, [])
generator版faltten
def flatten(ls): """ >>> list(flatten([1, [2, 3], [4], 5, [6, [7]]])) [1, 2, 3, 4, 5, 6, 7] """ if not isinstance(ls, list): yield ls else: for i in ls: for _ in flatten(i): yield _ pass pass pass
おまけ: median(中央値)
def median(ls): return sorted(ls)[len(ls) // 2]