動機
Pythonだったらここはリスト内包表記じゃないの??
と言われたので少し調べてみる。
リスト内包表記だけだと思ってたら他にもいろいろとあるみたいですね.
リスト
リストの内包表記です。
In [1]: l1 = [0,10,20,30,40]
In [2]: l2 = [x*10 for x in range(5)] #リスト内包表記
In [3]: print(l1,l2)
[0, 10, 20, 30, 40] [0, 10, 20, 30, 40]
タプル
リストとの違いは内容を変更できるのに対して、タプルは上書きできないということです。
In [1]: l1 = (0,10,20,30,40)
In [2]: l2 = (x*10 for x in range(5))
In [3]: print(l1,l2)
(0, 10, 20, 30, 40) <generator object <genexpr> at 0x7f7983d5f438>
セット内包表記
要素には順序がなく。インデックスで要素は取り出せないので注意が必要です。
ipythonのセット内包表記で
— もとうち (@SMotouchi_net) April 10, 2016
l1 ={0,10,20,30,40}
l2 ={x*10 for x in range(5)}
print(l1,l2)
{40, 0, 10, 20, 30} {0, 40, 10, 20, 30}
こうなりました。
要素に順序がないのでこの出力で正常ですね。
リスト内包表記if文(後置)
pythonに後置if文がありませんが、リスト内包表記に限っては書けてしまうようです。
[x for x in range(20) if x%2==0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
リスト内包表記if文(前置)
pythonの後置のように書くと失敗しがちなので注意しましょう。
[x if x%3==0 else x*10 for x in range(10)]
[0, 10, 20, 3, 40, 50, 6, 70, 80, 9]
FizzBuzz
["fizzbuzz" if i%15==0 else "fizz" if i%3==0 else "buzz" if i%5==0 else i for i in range(1,16)]
[1,2,'fizz',4,'buzz','fizz',7,8,'fizz','buzz',11,'fizz',13,14,'fizzbuzz']
正直、もの凄く面倒なのでこの辺は別の記事にまとめてみたいとおもいます。
ちょっと雑な感じですが気分が優れないので今回はこの辺で終わりたいとおもいます。
参考ページ
5. データ構造 — Python 3.5.1 ドキュメント