- 2018-12-14
- pythonプログラミング, 総論
- python, リスト内包表記
- 【Python入門】リスト内包表記について例題を使ってわかりやすく解説 はコメントを受け付けていません
今回はPythonでよく使うリストの内包表記について
解説していきたいと思います。
まず前提としてリストとタプルについての知識は必須です。
ですので、不安な方は先にこちらをご覧ください。
⇒【Python】タプルとは?リストとタプルの違いについても解説
⇒【Python】タプルを使う3つのメリットとリストとの違い
⇒【Python】リストの要素数を取得したり抽出したりする方法
それでは本題に入っていきましょう。
Pythonにおけるリスト内包表記について
まず例題1をご覧ください。
#例題1 x = (2,4,6,8,10) # ()でくくっているのでタプル y = [] #ここで空のリストを宣言する for i in x: #xのタプルをループで回す y.append(i) #yの空のリストに追加する print(y) #リストyを出力する
実行すると
[2, 4, 6, 8, 10]
とリストの形で表示されます。
結構、めんどくさいコードになっていますね。
ただ、タプルに入っている要素を
リストに入れ替えるだけの作業に対して
効率が悪すぎます(苦笑)。
そこでリストの内包表記の登場です。
例題2をご覧ください。
#例題2 x = (2,4,6,8,10) # ()でくくっているのでタプル y = [i for i in x] #ここがリスト内包表記のキモの部分 print(y) #リストyを出力する
実行すると例題1と同様に
[2, 4, 6, 8, 10]
とリストの形で表示されます。
これはどういう意味なのでしょう?
y = [i for i in x] #ここがリスト内包表記のキモの部分
をご覧ください。
これは例題1で登場した
for i in x: #xのタプルをループで回す
をそのまま
例題2の
y = [i for i in x] #ここがリスト内包表記のキモの部分
にぶち込んだ形です。
こんな感じでリスト内包表記を使えば
appendを使って使いしなくても
簡単にタプルの中身をリストに追加することができます。
もう少し複雑なリスト内包表記
例題2をもう少し複雑にしてみましょう。
先に例題1の内容をこんな感じで複雑にしてみますね。
例題3をご覧ください。
#例題3 x = (2,4,6,8,10) # ()でくくっているのでタプル y = [] for i in x: if i % 4 == 0: # 4で割った余りが0の場合という意味 y.append(i) #4で割った余りが0なら追加する print(y)
例題3ではif文を使って4で割った余りが0の場合だけ
リストに追加するようにしました。
実行すると
[4, 8]
と表示されます。
では例題3をリスト内包表記に書き換えてみましょう。
例題4をご覧ください。
#例題4 x = (2,4,6,8,10) # ()でくくっているのでタプル y = [i for i in x if i % 4 ==0] #例題3のfor文を[]の中に入れているだけ print(y)
実行すると
[4, 8]
と表示されます。
Pythonにおけるリスト内包表記のメリットとは?
例題1から4をご覧になっていただけると
わかると思いますが、リスト内包表記を使えば
リストを生成する行が1行ですみわけですね。
リスト内包表記を使えば、
少ない文字数で目的を達成することができます。
使う文字数が少ないほど、
処理スピードは速くなります。
なので、リスト内包表記を使えば使うほど
処理スピードが速くなるわけです。
一々処理が遅いプログラムがみんな嫌いです。
なので、速さを追求するならリスト内包表記の理解は必須といえるでしょう。
これがリスト内包表記のメリットです。
リスト内包表記のやりすぎはよくない
「リスト内包表記のメリットがわかった。
だったら、使いまくろう!」と思われたかもしれません。
でも、それは正直微妙です。
まず例題5をご覧ください。
#例題5 x = (2,4,6,8,10) # ()でくくっているのでタプル xx = (1,3,5,7,9) #例題5としてこのタプルを追加 y = [] for i in x: #初めのタプルをループで回す for q in xx: #例題5で加えた方のタプルを回す y.append(i * q) #1つ目のタプルと2つ目のタプルをかける print(y)
実行すると、
[2, 6, 10, 14, 18, 4, 12, 20, 28, 36, 6, 18, 30, 42, 54, 8, 24, 40, 56, 72, 10, 30, 50, 70, 90]
と出力されます。
こんな感じでたくさんの要素がリストに入っています。
これをリスト内包表記で記載してみましょう。
例題6をご覧ください。
#例題6 x = (2,4,6,8,10) # ()でくくっているのでタプル xx = (1,3,5,7,9) #例題5としてこのタプルを追加 y = [i * q for i in x for q in xx] #例題5のfor文2つをここに入れた print(y)
こんな感じで例題5のfor文2つと
appendのところでやったi * qをリストの中に入れました。
実行すると
[2, 6, 10, 14, 18, 4, 12, 20, 28, 36, 6, 18, 30, 42, 54, 8, 24, 40, 56, 72, 10, 30, 50, 70, 90]
と出力されます。
こんな感じでリスト内包表記として
forループをたくさん入れれば入れるほど
たくさんの文字が結果として跳ね返ってくるわけです。
かえってコードが分かりにくくなることがあります。
もしあなたの主観でも大丈夫なので
「ちょっとわかりにくいな」と思ったら
リスト内包表記を使わない方がよいです。
appendを使った処理に
切り替えた方がミスを防ぐことができると思います。
リスト内包表記のやりすぎでコードが複雑になると
理解するのに時間がかかり
かえって開発速度が落ちる原因になってしまうこともあります。
なので、リスト内包表記のやりすぎには十分に注意してくださいね。
以上でリスト内包表記の解説を終わります。
pythonを学ぶならこちらの動画講座がおすすめです
Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学び、実践的なアプリ開発の準備をする
かなり長い講座名ですね。
わかりにくそうな感じがします。ですが、pythonの基礎からしっかりとわかりやすく教えてくれます。
また、きれいなコードを書くための方法についても
教えてくれるので、周りが「どうやってそんなコードを書いてるの?」
とびっくりされるようになるかもしれません。それからWebアプリケーション開発の基本的なテクニックについても
教えてくれます。なので、pythonを使ってwebアプリケーションを作ってみようと
思っている方にもおすすめです。値段は時期によって違います。
詳しくはこちらをご覧ください。
みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習
この講座ではまずpythonの基礎を学びます。
次に人工知能について学んでいきます。そして最終的にはpythonを使って文字認識や株価分析ができるような技術力が身につくようになっています。
単純に教科書的なpythonを学ぶのではなく
仕事でも使えるスキルを身につけたい方におすすめの講座です。なのに値段は恐ろしいほど安いです。
時期によって値段は変動するので
詳しくはこちらをご覧ください。
Pythonで機械学習:scikit-learnで学ぶ識別入門
この動画講座は広島大学准教授の先生が担当しています。
機械学習が専門の先生です。すごく深い知識が身につきます。
大学の先生の講義って難しそうってイメージがあるかもしれません。でもそんなことはありません。
すごくわかりやすいです。pythonで機械学習のスキルを身につけたい方におすすめです。
値段は時期によって違いますが、かなり、良心的な価格になっています。詳しくはこちらをご覧ください。