早速ですが、Pythonの判定付きリスト内包表記の例を見てください。
>>> list1 = [i**2 for i in range(10) if i % 2 == 0]
>>> list1
[0, 4, 16, 36, 64]
if
文を後ろに置くのはrubyに似てますね。条件のカッコもなくていいなんて、、いいですね〜ワールドですね〜
まあ、話を戻して、「for…in 配列」のループは、本来ループ内の処理はその次に書きますが、内包表記は「ループ内処理 for…in 配列」のように理解すればいいかもしれません。
要点
テキストの「3.5 内包表記、ジェネレーター式」の内容について、自分なりにまとめた要点は以下です。
うまい表現はなく、ソースが大半になってしまいました。ご参考になれば嬉しいです。
ネストしたリストの内包表記の補足
forのネスト階層を以下のようにもう一つ増やしてみました。それでも普通にできますね。
>>> drinks = ['coffee', 'tea', 'Espresso']
>>> sizes = ['S', 'M', 'L']
>>> a = ['1', '2', '3']
>>> menu = [(drink, size, l) for drink in drinks for size in sizes for l in a]
>>> menu
[('coffee', 'S', '1'), ('coffee', 'S', '2'), ('coffee', 'S', '3'), ('coffee', 'M', '1'), ('coffee', 'M', '2'), ('coffee', 'M', '3'), ('coffee', 'L', '1'), ('coffee', 'L', '2'), ('coffee', 'L', '3'), ('tea', 'S', '1'), ('tea', 'S', '2'), ('tea', 'S', '3'), ('tea', 'M', '1'), ('tea', 'M', '2'), ('tea', 'M', '3'), ('tea', 'L', '1'), ('tea', 'L', '2'), ('tea', 'L', '3'), ('Espresso', 'S', '1'), ('Espresso', 'S', '2'), ('Espresso', 'S', '3'), ('Espresso', 'M', '1'), ('Espresso', 'M', '2'), ('Espresso', 'M', '3'), ('Espresso', 'L', '1'), ('Espresso', 'L', '2'), ('Espresso', 'L', '3')]
余談
このシリーズの記事にあるマインドマップはMindNodeというアプリを使って作っています。
一昨日そのアプリを開いたら、何故か突然アプリが壊れているとポップアップが出て、アプリが起動できませんでした。
当時スクショを取っていなかったので、以下はネット(参考2)から借りたものですが、確かこんな感じのアラートでした。
2回ほど起動してみたら、同じアラートで終わったので、言われた通りにAppStoreからダウンロードし直そうとして、AppStoreで検索したら、MindNodeというアプリが見つかりませんでした。
あれ?!確か自分はAppStoreからダウンロードしたんですけど、どういうこと?と思い、公式サイトにあるAppStoreへのリンクを辿っても、アプリがないと言われるだけです。
そこは素直に諦めて別のマインドマップアプリを探してXmindを使ってみましたが、MindNodeはアンインストールせずにそのままにしておきました。
そしたら、今日試しにMindNodeを起動してみたら、無事起動ができました!!Xmindよりも、MindNodeのほうの見た目が好みですので、良かったです!
完全事後調査ですが、参考1や2のページも見つかりました。原因は証明書の期限切れかもしれませんね。
似た事象が起きたら、しばらく置いたら治るかもしれません。
コメントを残す