Python 入門 ノート (49)リスト内表記

リスト内表記

タプルの要素を、for loop で取り出してリストにしてみます。

最初に、タプル  t  の要素を一つ一つ取り出して、リストを作ります。

t = (1, 2, 3, 4, 5) 
r = [] 
for i in t:
   r.append(i) 
print(r)

結果がリストとして出力されます。

[1, 2, 3, 4, 5]

同じことをリスト内表記でやってみる

これを、リスト内表記を利用して一行で書いてみます。

t = (1, 2, 3, 4, 5) 
r = [i for i in t] 
print(r)

同じ結果が得られます。

[1, 2, 3, 4, 5]

偶数のみ取り出す。

次に条件を追加してみます。偶数のみにします。

t = (1, 2, 3, 4, 5) r = [] for i in t:  
   if i % 2 == 0:   
      r.append(i) print(r)

結果は以下の様になりました。

[2, 4]

偶数のみ取り出すを、リスト内表記でやってみる

これもリスト内表記にしてみます。

r = [i for i in t if i % 2 == 0]
print(r)

結果は同じ様になります。

[2, 4]

リスト内表記が利用される理由

利用される理由としては

  • 一行で済む
  • メモリの使用量が少ない
  • append処理がないので早い

などの理由で、短い for loop の場合によく利用されます。

for loop の入れ子

新たなタプル t2 を追加します。

t2 を t のループなかで、ループします。

さらに、append の際 i * j の積を計算します。

t = (1, 2, 3, 4, 5) t2 = (5, 6, 7, 8, 9, 10) r = [] for i in t:   
    for j in t2:  
        r.append(i * j) print(r)

結果

[5, 6, 7, 8, 9, 10, 10, 12, 14, 16, 18, 20, 15, 18, 21, 24, 27, 30, 20, 24, 28, 32, 36, 40, 25, 30, 35, 40, 45, 50]

i と j の積の結果がリストで得られました。

for loop の入れ子を、リスト内表記でやってみる

同じことをリスト内表記でやってみます。

t = (1, 2, 3, 4, 5)
t2 = (5, 6, 7, 8, 9, 10)

r = [i * j for i in t for j in t2]
print(r)

同じ結果が得られました

[5, 6, 7, 8, 9, 10, 10, 12, 14, 16, 18, 20, 15, 18, 21, 24, 27, 30, 20, 24, 28, 32, 36, 40, 25, 30, 35, 40, 45, 50]

分かりにくいので、黄色と赤色と青色で見やすくしてみました。

リスト内表記は複雑にしすぎない

ここで示した、if 文で、偶数を選ぶ場合くらいならまだよいのですが、for loop を2つになると、コードの可読性が落ちてきます。

なので、これ以上の複雑化はお勧めできません。

コメント