Pythonのコードを劇的にすっきりと整理できる記法として、リスト内包表記があります。
リスト内包表記を使いこなせるようになると、コードの行数が削減されるだけでなく、可読性や処理速度の向上にもつながり、洗練されたPythonコードを書くための重要なステップとなります。
VBAやGoogle Apps Script(GAS)など、他の言語に触れた方にとっても、Pythonならではの直感的な記述スタイルは魅力的に感じられるはずです。
今回は基本から実務での活用例まで順を追って確認していきましょう!
リスト内包表記が選ばれる理由
通常、リスト(配列)を生成してデータを加工する場合、以下の3つのステップを踏みます。
- 空のリストを準備する
- for文で繰り返し処理を実行する
- appendメソッドで加工した要素を末尾に追加する
これに対して、リスト内包表記を用いると、これらの処理をわずか1行で完結させることが可能となります。コードがシンプルになることで、全体の構造が一目で把握しやすくなります。
基本構文と従来のfor文との比較
0から4までの整数をそれぞれ2倍にしたリストを作成する例を用いて、記述の違いを比較してみましょう。
従来のfor文による記述例
numbers = []
for i in range(5):
numbers.append(i * 2)
print(numbers)
# 出力: [0, 2, 4, 6, 8]
リスト内包表記による記述例
numbers = [i * 2 for i in range(5)]
print(numbers)
# 出力: [0, 2, 4, 6, 8]
角括弧 [] の中に直接 for 文を取り込む点が最大の特徴です。基本構文は以下の通りです。
[追加したい要素 for 変数 in イテラブル]
処理の順序としては、後ろのfor文でデータから要素を順に取り出し、先頭の式で加工した結果を新しいリストへ格納していくイメージとなります。
条件分岐を組み合わせたデータの抽出
リスト内包表記のメリットとして、if文によるフィルタリング処理も1行の中に組み込める点が挙げられます。
例えば、0から9までの数値の中から偶数のみを抽出し、それらを2乗したリストを作成する場合を考えてみましょう。
従来のfor文による条件分岐
result = []
for i in range(10):
if i % 2 == 0:
result.append(i ** 2)
print(result)
リスト内包表記による条件付き抽出
result = [i ** 2 for i in range(10) if i % 2 == 0]
print(result)
構文の末尾にif条件を追加するだけで、条件に合致したデータのみを選択的に加工して新しいリストを構築できます。
リスト内包表記を活用するメリットと実務上の注意点
主なメリット
- コード量の削減と視認性の向上: 複数行にわたる処理が1行にまとまるため、画面内に収まるコード量が増え、ロジックの見通しが良くなります。
- 処理速度の向上: ループ処理が最適化されているため、通常のfor文とappendを組み合わせるよりも高速に動作する傾向があります。
- 処理意図の明確化: 「既存のデータから加工された新しいリストを生成する」という目的がコード構造そのものから明確に伝わります。
実務上の注意点
- 複雑な多重ループや過剰な条件分岐への配慮: if-elseが幾重にも入り組んだ処理や、複数のfor文をネストした内包表記は、かえって可読性を損ねる原因となります。
- 目的と手段のバランス: 単に1行で短く書くこと自体を目的にせず、コードの読みやすさや保守性を優先し、必要に応じて通常のfor文を選択する判断も大切となります。
実務で役立つ具体的な活用シーン
業務自動化やスクレイピング、データ前処理の実務において頻出する具体的な活用パターンをご紹介します。
文字列データの前処理と空白除去
raw_data = [" Apple ", " Banana", "Orange "]
clean_data = [fruit.strip() for fruit in raw_data]
print(clean_data)
# 出力: ['Apple', 'Banana', 'Orange']
特定のデータだけ抽出
files = ["data.csv", "image.png", "report.csv", "note.txt"]
csv_files = [f for f in files if f.endswith(".csv")]
print(csv_files)
# 出力: ['data.csv', 'report.csv']
まとめ
リスト内包表記は、初めて目にする際は少し戸惑われるかもしれませんが、構造を一度理解すると便利な記法となります。
日常の業務自動化コードの中で「空リスト作成から始まるfor文」を見かけた際には、ぜひ「リスト内包表記でよりシンプルに書けないか」を意識してみてください!
Pythonの本は種類が多すぎて、業務効率化に使えるのか見分けるのが大変ですよね。実務自動化に5年以上携わってきた私が、「デスクワークの自動化に即戦力になった本」を厳選して紹介します。失敗しない1冊を見つけたい方は、ぜひ参考にしてみてください。

コメント