本記事では、pythonにおけるリスト内包表記の使い方について説明していこうと思います。
リスト内包表記は、リストを扱う上で非常に重要な知識となっているので、ぜひ最後まで見ていってください。
ちなみに、本ブログでは初心者の方でも理解できるように丁寧に説明しているので、全くの初心者という方も安心してください。
また、pythonをまだインストールしていないといった方は以下の記事を参考にしてインストールしてみましょう。
この記事でわかること
- リスト内包表記を使ってできること
- リスト内包表記の基本的な使い方
- リスト内包表記の様々な使い方
目次
リスト内包表記について
まず初めに、リスト内包表記とはどのようなものなのかについて説明していこうと思います。
リスト内包表記とは?
リスト内包表記とは、タプルや他のリストから新たなリストを条件付きで作成するリスト作成方法の一種です。
例えば、以下のようなことが行えます。
〇タプルからリストを作成
タプル(1, 2, 3, 4, 5) ⇒ リスト[1, 2, 3, 4, 5]
〇奇数要素を削除して新たなリストを作成
リスト[1, 2, 3, 4, 5] ⇒ リスト[2, 4]
このように、すでにあるデータを編集して新しいリストを作るときに使用するがリスト内包表記です。
ちなみに、この操作は別にfor文を使えばできてしまうのですが、リスト内包表記には『実行速度が速い』『コードが見やすい』といった特徴があります。
以下で実際に使用している例を見ていきましょう。
リスト内包表記の使い方
まず、先ほどの例でも挙げた『タプルからリストを作成する』というコードを、for文とリスト内包表記を使って書いていきたいと思います。
<input>
t = (1, 2, 3, 4, 5)
# for文を使用
a = []
for i in t:
a.append(i)
print(a)
print("****************")
# リスト内包表記を使用
b = [i for i in t]
print(b)
<output>
[1, 2, 3, 4, 5]
**************
[1, 2, 3, 4, 5]
上記コードの3~8行目がfor文を用いたコード、12~14行目がリスト内包表記を用いたコードになっています。
では、for文を用いたコードとリスト内包表記を用いたコードについて説明していきますね。
〇for文を用いたコード
まず、作成したリストを入れるための空のリスト『a』を用意して、for文を用いてタプルの要素を一つずつiに代入していきます。
for文の中の処理は『a.append(i)』となっているため、iに代入された値をリストに追加するといった操作を行っています。
こうすることで、タプルの要素を一つずつ取り出してリストの中に入れていくことが可能なので、タプルの全要素が移ったリストが生成されるのです。
〇リスト内包表記を用いたコード
リスト内包表記では、for文を用いたコードを[]の中に凝縮したと思ってください。
よく見てみると『[i for i in t]』となっていて、最初のi以外はすべてfor文と同じ記述の仕方ですよね。
つまり、『for i in t』によって、タプルの要素を順に変数iに代入していき、代入されるたびに先頭のiにも同じ要素を代入してあげます。
先頭のiは『値が代入されるたびにリストに要素を追加していく』といった機能を持っているので、この一行ですべての処理が完了して、『print(b)』を実行したときに、『print(a)』と同じ値を得ることが出来ます。
このようにして、同じ処理を行っているのですが、リスト内包表記を使用するとコード量を削減することが出来ます。
また、リスト内包表記を用いたほうがコンピュータの処理速度が速いです。
このようにリストを他のデータから新たに作成するときは積極的にリスト内表記を使っていきましょう。
リスト内表記の様々な使い方
ここまででリスト内包表記の基本的な使い方について確認してきましたが、もちろん先ほど挙げた例以外でも様々な場面でリスト内表記は使用されます。
ここでは、そんなリスト内包表記の様々な使い方について、いくつかご紹介していこうと思います。
既存リストから新規リストの作成
まずは冒頭でも少し紹介していた、リストから奇数要素を削除して新たなリストを作成する方法です。
先ほどと同様に、for文を使用する場合とリスト内包表記を使用する場合の両方で作成していきます。
<input>
a = [1, 2, 3, 4, 5]
# for文を使用
r = []
for i in a:
if i % 2 == 0:
r.append(i)
print(r)
print("*************")
# リスト内包表記を使用
new_r = [i for i in a if i % 2 == 0]
print(new_r)
<output>
[2, 4]
*************
[2, 4]
やっていることは先ほどとあまり変わらないと思います。
今回は、for文の中に『if i % 2 == 0』といった条件があるので、これをリスト内包表記の方にも付け加えてあげる感じですね。
リスト内包表記でも上記のように条件式を扱えるので覚えておきましょう。
複数リストから一つのリストを作成
続いて、複数リストから一つのリストを作成する方法についてです。
<input>
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]
# for文を使用
r = []
for i in a:
for j in b:
r.append(i * j)
print(r)
print("*************************************************************************************")
# リスト内包表記を使用
new_r = [i*j for i in a for j in b]
print(new_r)
<output>
[1, 2, 3, 4, 5, 2, 4, 6, 8, 10, 3, 6, 9, 12, 15, 4, 8, 12, 16, 20, 5, 10, 15, 20, 25]
*************************************************************************************
[1, 2, 3, 4, 5, 2, 4, 6, 8, 10, 3, 6, 9, 12, 15, 4, 8, 12, 16, 20, 5, 10, 15, 20, 25]
上記のコードでは、リストaとリストbの各要素をかけて一つのリストを作成しています。
if文が二つある場合でも、リスト内包表記が使用できるため、一行で新たなリストを作ることが出来ます。
まとめ
今回は、リスト内包表記について、for文と比較して使い方を確認してきたのですが、いかがだったでしょうか。
リスト内包表記を使用すれば、コードが簡潔に書ける上にコンピュータの処理速度まで上がるのでまさに一石二鳥ですよね。
皆さんも、自分でコードを書く際にぜひ積極的に使用してみてください。