Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

リスト内包表記で書いてみる

pythonでリストを生成する際に良く用いられるのがリスト内包表記です。for文からなる複数行のコードを一行で完結に記述できます。


0~9のリストを生成します。

numbers = []  # リストnumbersの生成
for x in range(10):  # xを0から9まで変える 
    numbers.append(x)  # xをリストnumbersに追加
print(numbers)

# 内包表記による表記
numbers_comprehensions = [x for x in range(10)]
print(numbers_comprehensions)

どちらの方法でも同じリストが作られます。

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


if 句で式を評価することにより、ある条件を満たすリストを生成できます。

numbers = []  # リストnumbersの生成
for x in range(10):  # xを0から9まで変える 
    if x%3 == 0:  # xを3で割ったあまりが0の場合(3の倍数)に次を実行
        numbers.append(x)  # xをリストnumbersに追加
print(numbers)

# 内包表記による表記
numbers_comprehensions = [x for x in range(10) if x%3 == 0]
print(numbers_comprehensions)

[0, 3, 6, 9]
[0, 3, 6, 9]


要素に対する操作を行い、その結果をリストにすることも可能です。ここではxの二乗からなるリストを生成します。

#xを0~9まで変え、xの二乗からなるリストを作る
squares = []  # リストsquaresの生成
for x in range(10):  # xを0から9まで変える 
    squares.append(x**2) # xの二乗を計算し、リストsquaresに追加
print(squares)

# 内包表記による表記
squares_comprehensions = [x**2 for x in range(10)]
print(squares_comprehensions)

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


元からあるリストに対する操作を内包表記で記述することが可能です。ここでは文字列リストの各要素に対して文字を足しています。

fruits = ['りんご', '梅', 'バナナ']  # リストfruitsの生成 
fruits = ['青'+x for x in fruits]  #リストの要素を1つづつ取り出し先頭に'青'を付ける  
print(fruits)  

['青りんご', '青梅', '青バナナ']


内包表記はfor文のネストが可能です。

x_y = []  # リストx_yの生成
for x in range(3, 0, -1):  # xを3から1まで1づつ減らす 
    for y in range(1, 4):  # yを1から3まで1づつ増やす
        x_y.append(x*y)  # x*yをリストx_yに追加
print(x_y)

# 内包表記による表記
x_y_comprehensions = [x*y for x in range(3, 0, -1)  for y in range(1, 4)]
print(x_y_comprehensions)

[3, 6, 9, 2, 4, 6, 1, 2, 3]
[3, 6, 9, 2, 4, 6, 1, 2, 3]


for文のネストとIf文を用いた場合

x_y = []  # リストx_yの生成
for x in range(3, 0, -1):  # xを3から1まで1づつ減らす 
    for y in range(1, 4):  # yを1から3まで1づつ増やす
        if x%3 == 0:  # xを3で割ったあまりが0の場合(3の倍数)に次を実行
            x_y.append(x*y)  # x*yをリストx_yに追加
print(x_y)

# 内包表記による表記
x_y_comprehensions = [x*y for x in range(3, 0, -1) for y in range(1, 4) if x%3 == 0]
print(x_y_comprehensions)  

[3, 6, 9]
[3, 6, 9]


複数の要素を同時に変えるzip()関数を用いた記述も可能です。

x_y = []  # リストx_yの生成
for x,y in zip(range(10),range(0,1000,100)):  # xを0~9、yを100とびに0~900同時に変える
    x_y.append(x*y)  # x*yをリストx_yに追加
print(x_y)

# 内包表記による表記
x_y_comprehensions = [x * y for x, y in zip(range(10),range(0,1000,100))]
print(x_y_comprehensions)

[0, 100, 400, 900, 1600, 2500, 3600, 4900, 6400, 8100]
[0, 100, 400, 900, 1600, 2500, 3600, 4900, 6400, 8100]

以下のサイトを参考にさせていただきました

Python公式 >> 5.1.3. リストの内包表記
Pythonの文法メモ > 【リスト】リスト内包表記
note.nkmk.me >> Python, zip関数の使い方: 複数のリストの要素をまとめて取得

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村