Python Python 入門 プログラミング

【python 入門】list(リスト)の内包表記の書き方、使い方

 

pythonは面白い書き方が多いですが、list(リスト)の内包表記もその一つで、最初見た方はわかりにくいのではないでしょうか?

 

本記事はこんな方におすすめです。

hituji
python始めたが、forの変な書き方(内包表記)があってわからない

 

本記事の内容

  • 内包表記の基本的書き方
  • 条件分を使った書き方
  • 関数を使った書き方

python入門 基礎まとめも参考にしてください。

>> 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には変わった書き方が多いので、しっかり習得しましょう。

 

-Python, Python 入門, プログラミング