じゃあ、おうちで学べる

本能を呼び覚ますこのコードに、君は抗えるか

Python3のリスト内包表記でFizzBuzzをやって体調が悪くなった…。

動機

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>

 

 

セット内包表記

要素には順序がなく。インデックスで要素は取り出せないので注意が必要です。

 

要素に順序がないのでこの出力で正常ですね。

 

 リスト内包表記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 ドキュメント

pythonの内包表記を少し詳しく - Qiita

タプルとリストの違い - Python学習日記