どうも!リョクちゃです。
さて、今回はリストをシンプルに作成する方法、
“内包表記”といわれる記法について解説していきます。
これを覚えることで、シンプルかつ短い行数でリストを作成することができてしまいます。
ぜひ、使い方など学んで、実際に試してみてください。
ちなみに前回は、
目次
内包表記とは
- リストをシンプルに作成する方法
- 内包表記を用いると複数行にわたる処理を1行で書けるようになります。
たとえば、1 ~ 10までの値を格納したリストを作成してください。
といった問題があったとします。
これを普通に書くと、下のようになります。
1 2 3 4 5 6 7 |
lstX = [] for i in range(10): lstX.append(i+1) print(lstX) # 出力 # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
内包表記を使うと、下のように書くことができます。
1 2 3 4 5 |
lstX = [i+1 for i in range(10)] print(lstX) # 出力 # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
このようにシンプルに書くことができます。
以降、内包表記について詳しく述べていきます。
構文
まず、書き方としては下のようになります。
リスト変数 = [<式> for <変数> in <反復可能なオブジェクト>]
になります。
反復可能なオブジェクトは、range()やリスト、文字列などが使えます。
先ほどの例でいうと、
リスト変数 → lstX
<式> → i + 1
<変数> → i
<反復可能なオブジェクト> → range(10)
にそれぞれ当てはめることができます。
応用
基本的な使い方は先ほど述べたようになります。
構文さえ覚えておけば、シンプルに書くことができます。
それでは、次はステップアップした書き方を紹介します。
たとえば、
1 ~ 10までの値が繰り返されるので、
そのうち偶数だけをリスト変数に格納して下さい。
といった問題があるとします。
これを内包表記を使って書くとどうなるでしょう?
1 2 3 4 5 |
lstX = [i for i in range(1, 11) if i % 2 == 0] print(lstX) # 出力 # [2, 4, 6, 8, 10] |
このようにして書き表すことができます。
ここで注目してほしいのが、<反復可能オブジェクト>の後に
条件判断としてif文を書いているところです。
if文を記述することで、
条件式の結果がTrueの場合の変数iの値をリスト変数lstXに格納をしていることになります。
したがって、偶数のみをリスト変数lstXに格納することができました。
これを構文に付け加えると、
リスト変数 = [<式> for <変数> in <反復可能なオブジェクト> <条件式>]
こうなりますね。
まとめ
内包表記(Comprehension)とは、forループを1行で記述した方法。
書き方として、下にまとめます。
リスト変数 = [<式> for <変数> in <反復可能なオブジェクト>]
リスト変数 = [<式> for <変数> in <反復可能なオブジェクト> <条件式>]
練習問題
① 内包表記を使って、リスト変数x[1,2,3,4,5,6,7,8,9,10]の要素を
それぞれ2倍したリスト変数yを新たに作成してください。
おわりに
ざっくりとではありますが、内包表記について解説をしてみました。
最初は慣れない記法なので、わかりづらく時間がかかりますが、
覚えると、かなり便利ですので、この機会にぜひ。
筆者としては、Pythonの可読性の観点でいうと、外れているのでは?
と最初は感じましたが、慣れていくとそうでもないのでは?と思っております。
最初は、forループを使ってからイメージをつかんで、ある程度かけるようになってきたら
内包表記を使ってみるのでいいと思います。
いまは、こんな書き方があるのか!といった程度に覚えてもらえれば。