リスト(list)

【Python】リスト内包表記の使い方

【Python】リスト内包表記の使い方
naoki-hn

Python のリスト内包表記(list comprehension)の使い方について解説します。

リスト内包表記(list comprehension)

Python のリスト内包表記(list comprehension)は、既存リスト等のイテラブルなオブジェクトから新たなリストをシンプルに記載して作成する定義方法です。

この記事では、リスト内包表記の基本的な使い方について紹介します。

リスト内包表記の使い方

リスト内包表記の構文は以下になります。

[式 for 仮変数 in イテラブルなオブジェクト if 条件]

上記の意味は「イテラブルなオブジェクトから要素を順番に仮変数に取得し、条件に一致するものに対して式を適用した値でリストを作る」となります。

リスト内包表記を使う場合

リスト内包表記を使用するには以下のようにします。

# dataの中で、2で割り切れる数値のみを取り出してnew_dataを作成する。
# リスト内包表記を使って記載する方法
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_data = [i for i in data if i % 2 == 0]
print(f"new_data: {new_data}")
【実行結果】
new_data: [2, 4, 6, 8, 10]

上記例では、data という数値リストの中から 2 で割り切れる数値のみ取り出して new_data という新しいリストを作成しています。

リスト内包表記を使用しない場合

リスト内包表記は、通常の for 文で書き換えることが可能です。

# リスト内包表記を使用しない場合の記載方法
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_data = []

for i in data:
    if i % 2 == 0:
        new_data.append(i)
print(f"new_data: {new_data}")

複数リストからリスト内包表記を用いてリストを作成する方法

リスト内包表記は、複数のリストを使って新しいリストを作成することも可能です。

リスト内包表記を使う場合

# 複数のリストから新しいリストを作成する。
# リスト内包表記を用いる
data1 = [1, 2, 3, 4, 5]
data2 = [11, 12, 13, 14, 15]
new_data = [i * j for i in data1 if i % 2 == 0 for j in data2 if j % 2 == 0]

print(f"new_data: {new_data}")
【実行結果】
new_data: [24, 28, 48, 56]

上記例では、data1data2 という 2 つのリストから 2 で割り切れる数値を取り出し、掛け合わせた値で新しい new_data というリストを作成しています。

リスト内包表記を使用しないで記載する場合

上記例は、for 文を使って以下のように書き換えることができます。

# リスト内包表記を使用しない場合の記載方法
data1 = [1, 2, 3, 4, 5]
data2 = [11, 12, 13, 14, 15]
new_data = []

for i in data1:
    if i % 2 == 0:
        for j in data2:
            if j % 2 == 0:
                new_data.append(i * j)
print(f"new_data: {new_data}")

リスト内包表記の特徴と注意点

リスト内包表記は、処理をシンプルに記述できる点が特徴です。また、リスト内包表記は、Python 内部で最適化されるため、一般的に実行速度は速くなります。ただし、処理速度は状況によって異なり、必ず早いとは限らない点に注意してください。

なお、リスト内包表記を使うことでコードが複雑になる場合には、使用を慎重に検討してください。特に、チーム開発ではソースコードの可読性は重要なため、目的に応じてシンプルさ、可読性、実行速度のバランスを保つことが重要です。

まとめ

Python のリスト内包表記(list comprehension)の使い方を解説しました。

リスト内包表記は、イテラブルなオブジェクトからシンプルに新たなリストを作成する定義方法です。この記事では、リスト内包表記の基本や特徴を紹介しました。

Python の内包表記は他にも「辞書内包表記」「集合内包表記」「ジェネレータ内包表記」があります。他の内包表記は「内包表記(まとめ)」を参考にしてください。

ソースコード

上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。

あわせて読みたい
【Python Tech】プログラミングガイド
【Python Tech】プログラミングガイド
ABOUT ME
ホッシー
ホッシー
システムエンジニア
はじめまして。当サイトをご覧いただきありがとうございます。 私は製造業のメーカーで、DX推進や業務システムの設計・開発・導入を担当しているシステムエンジニアです。これまでに転職も経験しており、以前は大手電機メーカーでシステム開発に携わっていました。

プログラミング言語はこれまでC、C++、JAVA等を扱ってきましたが、最近では特に機械学習等の分析でも注目されているPythonについてとても興味をもって取り組んでいます。これまでの経験をもとに、Pythonに興味を持つ方のお役に立てるような情報を発信していきたいと思います。どうぞよろしくお願いいたします。

※キャラクターデザイン:ゼイルン様
記事URLをコピーしました