1: 2016-12-25 (日) 10:25:19 njf[6] [7] [8] | 2: 2016-12-25 (日) 11:37:30 njf[6] [9] [10] | ||
---|---|---|---|
Line 2: | Line 2: | ||
他の言語には少ない書き方で、しかも結構便利なのでこれをよく使うようになるとPython使いこなし始めたような気になります。もちろん、気のせいですが。 | 他の言語には少ない書き方で、しかも結構便利なのでこれをよく使うようになるとPython使いこなし始めたような気になります。もちろん、気のせいですが。 | ||
+ | |||
+ | 内包というくらいなので、リストや辞書オブジェクトなどの中で使います。例えば、 | ||
+ | |||
+ | li = [ x*2 for x in range(10)] | ||
+ | |||
+ | とするとliは | ||
+ | [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] | ||
+ | |||
+ | となります。 | ||
+ | つまりリストなどのカッコの中に、最初に値、続いてループのルールを書くとそのルールにのっとって作成された要素のリストなどができるという記法です。 | ||
+ | |||
+ | これを内包表記を使わずに書くと、 | ||
+ | |||
+ | li = [] | ||
+ | for x in range(10): | ||
+ | li.append(x*2) | ||
+ | |||
+ | となります。 | ||
+ | |||
+ | 一般に内包表記のほうが処理速度は速いと言われています。 | ||
+ | また、記法もコンパクトになり、ちょっとした処理には便利です。 | ||
+ | |||
+ | また「if」を用いて条件を指定することも可能です。 | ||
+ | |||
+ | li = [ x*2 for x in range(10) if x < 2] | ||
+ | print li | ||
+ | 結果 | ||
+ | [0, 2] | ||
+ | |||
+ | 高速化や記法の簡略化といったメリットのある一方で、複雑な処理を書くのは難しく、Pythonに不慣れな人には一見して何が書いてあるか良くわからず、Pythonの良さである読みやすさがなくなるのではという意見もあります。 | ||
+ | |||
+ | Pythonにはリストの検索や変換を行う、mapやfilterなどの関数もあり、処理は遅くなりますがそちらを使った方が見やすくなることもあります。それらについては「[[Python/リストの検索と変換]]」を参照してください。 |
(This host) = https://njf.jp