pythonは面白い書き方が多いですが、list(リスト)の内包表記もその一つで、最初見た方はわかりにくいのではないでしょうか?
本記事はこんな方におすすめです。
本記事の内容
- 内包表記の基本的書き方
- 条件分を使った書き方
- 関数を使った書き方
python入門 基礎まとめも参考にしてください。
基本的な書き方
まず、一番基本的な書き方は以下のようになります。
for文を1行でかけます。
早速使ってみますが、まず内包表記でない普通のfor文の場合をみていきます。
イテラブルにはrange(5)=(0,1,2,3,4)を使って、繰り返し処理をします。
num_list=[] for i in range(5): num_lsit.appned(i) print(num_list)
処理のイメージがわかったら、この処理を内包表記で書いていきます。
num_list = [i for i in range(5)] print(num_list)
[0, 1, 2, 3, 4]
見比べて、処理イメージをつかんでください。
イテラブルなlistとかtupleから取得する、iの値は使っても使わなくても良いです。
例えば、下記のように乱数を5つを作ることもできます。
import random random.seed(2) num_list = [random.random() for i in range(5)] print(num_list)
[0.9560342718892494, 0.9478274870593494, 0.05655136772680869, 0.08487199515892163, 0.8354988781294496]
if文を追加
if文は以下のように追加していきます。
条件に一致するものだけが、処理されていきます。
イテラブルには、先程乱数を作ったnum_listを使います。
まずは、普通のfor文から。
num_list2 = [] for i in num_list: if i>0.5: num_list2.append(i) print(num_list2)
これを内包表記にすると
num_list2 = [i for i in num_list if i>0.5] print(num_list2)
[0.9560342718892494, 0.9478274870593494, 0.8354988781294496]
if else文を追加
次は、if else文を追加します。
まず、普通のfor文
num_list2 = [] for i in num_list: if i>0.5: num_list2.append(i) else: num_list2.append(-i) print(num_list2)
これを内包表記にすると
num_list2 = [i if i>0.5 else -i for i in num_list ] print(num_list2)
[0.7849224308065742, 0.642245292879807, -0.476180275653749, -0.08009351022651523, -0.09947931690467204]
関数を追加
5つの乱数を最大値、最小値を計算する関数を使って処理してみましょう。
まずデータを作成。大量のデータを処理しているイメージで、10万ほど作ってみます。
# 5×100000のデータを作成 import numpy as np np.random.seed(5) num_list = np.random.rand(100000,5).tolist()
次に、最大値と最小値を計算する関数を用意します。
# max minを返す関数 def calc_max_min(data): return[max(data), min(data)]
では、これをfor文で処理していきます。
num_list2 = [] for d in num_list: num_list2.append(calc_max_min(d)) print('元データ', num_list[0]) print('処理後', num_list2[0])
これを内包表記にすると
num_list2 = [calc_max_min(d) for d in num_list] print('元データ', num_list[0]) print('処理後', num_list2[0])
元データ [0.22199317108973948, 0.8707323061773764, 0.20671915533942642, 0.9186109079379216, 0.48841118879482914] 処理後 [0.9186109079379216, 0.20671915533942642]
最大値と最小値が計算できています。
以上ができれば、内包表記については完璧です!
内包表記もそうですが、pythonには変わった書き方が多いので、しっかり習得しましょう。