LoginSignup
1
2

More than 3 years have passed since last update.

Python: ジェネレータでちょうどいいflat / flat_mapを作ってみた

Last updated at Posted at 2020-12-14

何かちょうどいいのが見当らなかったので自前で作ってみました。どっかにあるのかな?
「ちょうどいいの」 とは:

  • [[0], [1], [2]] -> [0, 1, 2] :flatの基本機能。あたりまえか
  • [0, [1], [[2]]] -> [0, 1, [2]] :リストでない要素はそのまま。一段だけ。再帰なし。
  • [(0, 1), {'a':2, 'b':3}, "45", [6, 7]] -> [(0, 1), {'a': 2, 'b': 3}, '45', 6, 7] :listにだけ作用する。ほかの iterable には反応しない。

flat = lambda xs : (
    y
    for x in xs
    for y in (
        [x] if type(x) is not list else
        x
        )
    )

リストじゃないやつは一旦リストに持ち上げてからバラす作戦です。
Pythonの流儀に合わせて、ジェネレータにしました。

これを使えば flat_map はこうなります。

flat_map = lambda f, xs : flat( map( f, xs ) )

他にちょうどいいのがあれば コメント よろしくお願いします。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2