Pythonのリスト内包表記(list comprehension)の使い方について解説します。
Contents
リスト内包表記(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]
上記例では、data1
とdata2
という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にて公開しています。参考にしていただければと思います。