概要
こんにちは、すのくろです。
今回はfor文を応用した「リスト内包表記」について説明したいと思います。
- 「リスト内包表記って何?」
- 「リスト内包表記はなんとなく知っているけど、どうやって使うんだろう?」
といった方に向けた内容になります。
もし「for文」そのものをまず知りたいという方は、こちらの記事でfor文の基本について解説していますので、こちらから先に見ていただけると幸いです。
本記事の構成は、以下の通りです。
- for文を用いたリスト内包表記の作成方法
- if文を応用したリスト内包表記
- データ分析でのリスト内包表記の使い方の例
何かと便利なリスト内包表記をこの場でぜひ憶えていただけると幸いです。
それでは解説していきます!
リスト内包表記の作り方
まずは、リスト内包表記の作成方法について説明します。
普通のfor文と比較しながら見ていきたいと思います。
今回作成する具体的な例として、
「1〜9までの数を2乗にした数(square)のリスト」
を作成したいと思います。
初めに、普通のfor文で作成すると、以下のようなコードになります。
[ 普通のfor文の場合 ]
# 普通のfor文で作った場合
squares = []
n_list = range(1,10)
for n in n_list:
x = n*n
squares.append(x)
print(squares)
### [1, 4, 9, 16, 25, 36, 49, 64, 81]
このように、for文で順番に1〜9の数を2乗して、その2乗した数をsquaresという箱(リスト)の中に格納して実現しています。
これに対して、リスト内包表記の場合を見ていきましょう。
[ リスト内包表記の場合 ]
# リスト内包表記の場合
n_list = range(1,10)
squares = [n*n for n in n_list]
print(squares)
### [1, 4, 9, 16, 25, 36, 49, 64, 81]
かなりシンプルになりましたね。画像で解説だと以下のようになります。

まず、リスト内包表記では実行文の処理内容をリストの中につくります。
その後にforから始まる条件式を続けて書いていきます。
この1行だけでfor文を回した結果のリストが完成します!
今回の場合では、
- 実行したい式:n * n (nの2乗)
- 変数:n
- リスト:n_list ([1, 2, 3, 4, 5, 6, 7, 8, 9])
となります。
この形に慣れれば、特に形式的にfor文を使わなくて手軽に値を回してリスト作成することができるようになると思います。
if文を用いたリスト内包表記の書き方
続いて、if文を用いたリスト内包表記についての解説です。
結論から言うとif文の条件をfor文の条件式の後にくっつけるだけでOKです。
以下に例を示します。
n_list = range(1,10)
[n*n for n in n_list if n%2==0]
### [4, 16, 36, 64]
この式では、リストの中の数が偶数の時だけ(n%2==0)、for文で回して2乗の数を算出しています。
このように、if文を使うときは、リスト内包表記のfor文の条件の後に、「if」から始めて条件式を加えていくということだけ覚えてもらえれば良いです。
画像で補足すると、以下の通りです。

データ分析でのリスト内包表記の使い方
最後に、リスト内包表記をデータ分析時にどのように使っていくかを説明していきたいと思います。
1. 規則的なラベルの作成
まずは、よくある例として、規則的な文字列の作成があげられます。
- data1, data2, data3, ….
- カテゴリー1, カテゴリー2, カテゴリー3,…
などのものです。
# 規則的なラベルや文字列の作成
# 1. No.1〜9のデータの作成
num = range(1,10)
[ 'No_0' + str(n) for n in num]
### 出力結果
['No_01',
'No_02',
'No_03',
'No_04',
'No_05',
'No_06',
'No_07',
'No_08',
'No_09']
このように、文字の連番など規則的なラベルを作成する場合に、リスト内包表記をささっと使って作成する場面があります。
2. 文字列に拡張子の追加
次に文字列データに拡張子(.csv、 .jpeg、.pngなど)を追加する例です。
# 2. 規則的なファイル名の作成
animals = ['dog', 'cat', 'bird', 'tiger', 'lion']
print([animal + '.jpeg' for animal in animals])
print([animal + "_data" + '.csv' for animal in animals])
### 出力結果
['dog.jpeg', 'cat.jpeg', 'bird.jpeg', 'tiger.jpeg', 'lion.jpeg']
['dog_data.csv', 'cat_data.csv', 'bird_data.csv', 'tiger_data.csv', 'lion_data.csv']
これは規則的なファイル名を作成する時などに重宝します。
pythonでは、データ分析の一環として、画像ファイルや表ファイルを一括で管理したり、名前変更したりすることがあります。
その際に今回の例のような処理をして、まずは文字列を作成することなどがあります。
まとめ
以上、リスト内包表記の解説でした。
- [実行文] for [条件式]
- [実行文] for [条件式] if [条件式]
- 規則的な文字列や数値表現に便利
リスト内包表記を知っていると、コードがシンプルに書けて、簡単に少し複雑な式変換などが1行でできます。
あと、何よりスマートに表現できていると気持ちも良いし自己満足感が得られると思います。笑
是非、日々の解析プログラムの中にリスト内包表記を取り入れてみてください!
Pythonを中心としたプログラミングをより体系的に学びたいと言う方向けに、おすすめのオンラインスクールを2つ厳選して紹介していますので、こちらもよければご覧ください!
以上、ここまでお読みいただき、ありがとうございました!
コメント