リスト内包表記で書いてみる
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関数の使い方: 複数のリストの要素をまとめて取得