When it’s ready.

出来るまで出来ない

リスト内包表記 キテナカッタ

webooさんが昨日の問題の正しい答えをブログに上げていた

キタコレとか言いながら全然きてなかった>オレ
リスト内包表記の練習問題を考えて解決できたと思ったら、まったく解決できてなかった。
Webooさんのブログで、こんなにきれいに書けることを知ることが出来ました。webooさんありがとうです。

自分のやり方
>>> moto = [[1,2,3],[4,5,6],[7,8,9]]
>>> saki =  ','.join( [y[1:-1] for y in  [str(x) for x in moto]]).split(',')
webooさんのやり方
>>> [x for y in arr for x in y]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

webooさんのやり方めちゃくちゃシンプル。自分のやり方、いんちきすぎる。
自分の理解は、リスト内包表記は、後ろに書いたものから展開されていって、左の変数に次々渡されると思っていた。(というか、それしか考えられなかった)

webooさんの書き方を見ると、処理的には、右方向に進んでる。これをぜひマスターせねばなるまい。

配列の要素をひとつずつ取り出して、それをどう処理するかという考え方ではなく
配列を構成している式を書いて欲しい所の要素を取り出すという考え方で行く感じか?そうか!そういうことか?

もう一個深いので試してみる>リスト内包表記

問題
[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]

という配列を、1時配列に戻せ、ただし偶数のみ

[2, 4, 6, 8]
回答例

今回Webooさんに教えてもらったものを参考にしてみる

[x for z in arr for y in z for x in y if x%2 == 0]

こぇ。一発で出来た。なんか、多層構造のとって来る方法がわかってきた気がする。

次は、λか・・・