Python 速習チュートリアル

Python リスト内包表記

1. リスト内包表記とは?

リスト内包表記 (List Comprehension) は、既存のリスト(またはイテラブルなオブジェクト)の値に基づいて、新しいリストを作成する際に、より短い構文を提供します。

比較例:名前の中に "a" が含まれるフルーツだけを抽出する

従来の for ループの場合:

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []

for x in fruits:
  if "a" in x:
    newlist.append(x)

print(newlist)

リスト内包表記の場合:

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = [x for x in fruits if "a" in x]

print(newlist)

たった1行で同じ処理が完結します。これがPythonらしい(Pythonicな)コードの書き方です。

2. 構文 (The Syntax)

リスト内包表記の基本構造は以下の通りです。

newlist = [expression for item in iterable if condition == True]

補足: 戻り値は新しいリストです。元のリストは変更されません。

3. 条件 (Condition)

if 文による条件(Condition)は、フィルタ(Filter)のような役割を果たし、特定の条件を満たす項目のみを抽出します。

例:"apple" 以外のすべての項目を抽出する

newlist = [x for x in fruits if x != "apple"]

if condition 部分は省略可能です。

4. イテラブル (Iterable)

イテラブル(Iterable)の部分には、リストだけでなく、タプル、セット、または range() 関数などのループ可能なオブジェクトなら何でも指定できます。

例:0から9までの数値リストを作成する

newlist = [x for x in range(10)]

例:条件付き(5未満のみ)で作成する

newlist = [x for x in range(10) if x < 5]

5. 式 (Expression)

式(Expression)の部分は、リストに追加される前に実行される加工(変換)処理です。

例:すべての項目を大文字に変換する

newlist = [x.upper() for x in fruits]

例:すべての項目を特定の文字列('hello')に置き換える

newlist = ['hello' for x in fruits]

6. if-else の活用

式の中に if-else を含めることで、条件に応じた値の出し分けが可能になります。

例:"banana" の場合は "orange" と表示し、それ以外はそのままにする

newlist = [x if x != "banana" else "orange" for x in fruits]

この場合の構文は、「もし xbanana でなければ x を、そうでなければ(elseorange を返す」という意味になります。

リスト内包表記を使いこなすと、コードが格段にスッキリします。ただし、あまりに複雑な条件を1行に詰め込みすぎると、逆にかえって読みづらくなることもあるので、「読みやすさ」とのバランスを大切にしましょう。次は、作成したリストを並び替える「リストのソート(Sort Lists)」について見ていきましょう。