【Python】リスト内包表記 for文との比較とそのメリット 具体的な使い方を解説

リスト内包表記 (List Comprehension) とは?


リスト内包表記(list comprehension)はPythonの便利な表記法です。リストを簡潔かつ効率的に作成できるメリットがあります。

for文を使ってリストを操作する場合、複数行に渡るコードになることが多いですが、リスト内包を使うことで1行にまとめることができ、コードの可読性や実行速度が向上します。

例えば、リストの各要素を2倍にした新しいリストを作成する場合、従来のfor文とリスト内包では以下のような違いがあります。

リスト内包表記における文法


基本的な構文は以下の通りです。

コピーしました!

python
[式 for 変数 in イテラブル if 条件]
  • 式: リストの各要素に対して実行する操作
  • 変数: イテラブル(例えばリストやレンジ)から取り出される要素。
  • イテラブル: リストやタプル、文字列などの反復可能なオブジェクト
  • 条件: 条件式(任意)

リスト内包表記のメリット


for文やwhile文と比較して以下のようなメリットがあります。

  • コードが短くなる: for文で数行にわたる記述でも、リスト内包では1行で表現できます。
  • 実行速度が速い: 内部で最適化されているため、通常のループより高速に動作します。
  • 可読性の向上: 簡潔な表記によって、どのような処理が行われているのかを一目で理解しやすくなります。

リスト内包表記とfor文の比較


リスト内包と従来のfor文を比較するため、例を用いてその違いを見てみましょう。

例1)for文とリスト内包表記の比較

for文の場合

コピーしました!

python
result = []

for i in range(10):
    result.append(i * 2)

print(result)

リスト内包の場合

コピーしました!

bash
result = [i * 2 for i in range(10)]

print(result)

リスト内包表記を使用すると、わずか1行で同じ計算が可能になり、コードが簡潔になります。

例2)for文とリスト内包表記の比較

for文の場合

コピーしました!

bash
result = []

for i in range(1, 21):
    if i % 2 == 0:

result.append(i ** 2)

print(result)

リスト内包の場合

コピーしました!

bash
result = [i ** 2 for i in range(1, 21) if i % 2 == 0]
print(result)

入れ子のリスト内包表記


リスト内包表記は、さらにその中に別のリスト内包表記を含めることができます。
これを「入れ子のリスト内包表記」と呼びます。

例えば2次元配列(行列)の転置を行うことができます。

for文で書いた場合

コピーしました!

bash
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

transposed = []

for i in range(4):
    transposed_row = []
    
    for row in matrix:
        transposed_row.append(row[i])
        transposed.append(transposed_row)

print(transposed)

リスト内包表記の場合

コピーしました!

bash
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

transposed = [[row[i] for row in matrix] for i in range(4)]

print(transposed)

本メディアの記事等の内容には細心の注意を払っておりますが、正確性を保証するものではありません。もし記事内に誤りや不正確な情報がございましたら、こちらのお問い合わせフォームよりご連絡ください。

当メディアは、読者の皆様からのご指摘を大切にし、内容の見直しや修正を行うことで、より有益な記事を提供していく所存です。皆様のご理解とご協力をお願いいたします。