カテゴリ: Python 更新日: 2026/01/06

Pythonでリスト内包表記を使ってループを簡潔に書く方法

Pythonでリスト内包表記を使ってループを簡潔に書く方法
Pythonでリスト内包表記を使ってループを簡潔に書く方法

先生と生徒の会話形式で理解しよう

生徒

「先生、Pythonでリストを作るときって、毎回for文を使わなきゃいけないんですか?」

先生

「いい質問ですね。実はPythonには、リスト内包表記という便利な書き方があるんですよ。ループをもっと短く、見やすく書けます。」

生徒

「それってどういう意味なんですか?初心者でも使えますか?」

先生

「もちろん。これから順番にリスト内包表記の基本から、実際の使い方まで丁寧に説明していきましょう!」

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

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

Pythonのリスト内包表記(list comprehension)とは、リストを短い書き方で作る方法のことです。通常のfor文を使った書き方よりも、シンプルで読みやすいのが特徴です。

例えば、「1から5までの数字をリストにしたい」という場合、普通のfor文だと次のように書きます。


numbers = []
for i in range(1, 6):
    numbers.append(i)
print(numbers)

このコードでは、numbersというリストに1〜5までを1つずつ追加しています。ですが、リスト内包表記を使えば、たった1行で同じことができます。


numbers = [i for i in range(1, 6)]
print(numbers)

どちらのコードも、結果は同じです。


[1, 2, 3, 4, 5]

2. なぜリスト内包表記を使うのか?

2. なぜリスト内包表記を使うのか?
2. なぜリスト内包表記を使うのか?

リスト内包表記を使うメリットは次のとおりです。

  • コードが短くなる(for文よりシンプル)
  • 読みやすい(ひと目で何をしているかわかる)
  • 初心者でも覚えやすいパターンになっている

ただし、慣れないうちは「?」と思うかもしれません。でも心配いりません。これからいろんな例を見ながら、ゆっくり覚えていきましょう。

3. リスト内包表記の基本構文

3. リスト内包表記の基本構文
3. リスト内包表記の基本構文

リスト内包表記の書き方は、次のような形です。


[変数 for 変数 in 繰り返しの対象]

この中で出てくる「for 変数 in ○○」という部分は、通常のfor文と同じ意味です。

つまり、「○○の中から1つずつ取り出して、変数に入れて、それをリストに追加する」という動きをしています。

4. 値を加工しながらリストを作る

4. 値を加工しながらリストを作る
4. 値を加工しながらリストを作る

リスト内包表記は、ただ値を取り出すだけでなく、取り出した値に計算や加工をしてからリストに入れることもできます。

例えば、「1から5までの数字を2倍したリスト」を作ってみましょう。


doubles = [i * 2 for i in range(1, 6)]
print(doubles)

[2, 4, 6, 8, 10]

i * 2の部分で、リストに入れる値を加工しています。

5. 条件付きのリスト内包表記

5. 条件付きのリスト内包表記
5. 条件付きのリスト内包表記

リスト内包表記では、条件付きで値を入れることもできます。例えば、「1から10までのうち、偶数だけを取り出したい」ときは、次のように書けます。


evens = [i for i in range(1, 11) if i % 2 == 0]
print(evens)

[2, 4, 6, 8, 10]

if i % 2 == 0の部分が条件です。%は「割ったあとの余り」を意味します。

6. 文字列を使ったリスト内包表記

6. 文字列を使ったリスト内包表記
6. 文字列を使ったリスト内包表記

リスト内包表記は、数字だけでなく文字列(文字の集まり)にも使えます。

例えば、「hello」という文字列の1文字ずつをリストにしてみましょう。


letters = [char for char in "hello"]
print(letters)

['h', 'e', 'l', 'l', 'o']

このように、文字列の1文字1文字を扱いたいときにも便利です。

7. ネスト(入れ子)のリスト内包表記

7. ネスト(入れ子)のリスト内包表記
7. ネスト(入れ子)のリスト内包表記

少し応用になりますが、2重のループを使ったリスト内包表記も可能です。

たとえば、「1〜3の数字と、'a'〜'c'の文字を組み合わせたい」場合です。


combinations = [str(i) + c for i in range(1, 4) for c in 'abc']
print(combinations)

['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']

このように、複雑な組み合わせを簡単にリスト化できます。

8. リスト内包表記と普通のfor文の違い

8. リスト内包表記と普通のfor文の違い
8. リスト内包表記と普通のfor文の違い

リスト内包表記は簡潔ですが、処理が複雑になりすぎると逆に読みにくくなることもあります。

次のような場合は、通常のfor文の方が良いかもしれません。

  • 条件が複雑なとき
  • リストではなく、他のことをしたいとき
  • 説明やコメントを多く入れたいとき

使いどころを見極めて、リスト内包表記for文を上手に使い分けましょう。

まとめ

まとめ
まとめ

リスト内包表記の基本を振り返る

この記事では、Pythonのリスト内包表記について、基本の考え方から具体的な使い方、 そして通常のfor文との違いまでを段階的に解説してきました。 リスト内包表記は、Pythonの中でも特に人気のある書き方の一つで、 繰り返し処理とリスト作成を同時に、しかも短いコードで表現できる点が大きな特徴です。 初心者の方にとっては最初は少し見慣れない書き方に感じるかもしれませんが、 パターンを理解すると、とても読みやすく、書きやすい構文であることが分かってきます。

通常のfor文では、空のリストを用意して、appendで一つずつ値を追加する必要があります。 一方で、リスト内包表記を使えば、「どの範囲のデータを」「どのように加工して」 「どんな条件で」リストに入れるのかを、ひと目で把握できる形で書くことができます。 これはコードの可読性を高めるだけでなく、処理の意図を明確に伝えるうえでも大きなメリットです。

条件付きや加工処理で広がる活用範囲

リスト内包表記の強みは、単純な繰り返しだけでなく、 値を加工したり、条件を付けて必要なデータだけを抽出できる点にあります。 数値を二倍にする、特定の条件を満たす要素だけを集める、 文字列を一文字ずつ分解して処理するなど、 さまざまな場面で柔軟に活用できます。

また、二重ループを使ったネスト構造のリスト内包表記を理解すると、 組み合わせデータやパターン生成も簡潔に書けるようになります。 ただし、処理が複雑になりすぎると読みづらくなるため、 何をしているのかが直感的に分かるかどうかを意識することが重要です。 状況によっては、通常のfor文に戻す判断も大切になります。

まとめとしてのサンプルプログラム


numbers = [i for i in range(1, 21) if i % 2 == 0]
print("偶数のリスト:", numbers)

squares = [i * i for i in numbers]
print("偶数の二乗:", squares)

words = ["python", "list", "comprehension"]
lengths = [len(word) for word in words]
print("文字数一覧:", lengths)

このサンプルでは、条件付きのリスト内包表記、値の加工、 さらに文字列データへの応用をまとめて確認しています。 短いコードの中に処理内容が集約されているため、 慣れてくると処理の流れを素早く把握できるようになります。 日常的に使うことで、Pythonらしい書き方が自然と身についていきます。

先生と生徒の振り返り会話

生徒

「最初は難しそうに見えましたけど、 for文と同じ動きをしていると分かってから一気に理解できました」

先生

「それはとても良い理解ですね。 リスト内包表記は、for文を短く書いた形だと考えると分かりやすいです」

生徒

「条件を付けたり、値を加工できるのが便利だと思いました。 データ整理に使えそうです」

先生

「その通りです。 リスト内包表記はデータ処理の基本になる書き方なので、 これからもたくさんの場面で登場します。 無理に使おうとせず、分かりやすい場面から少しずつ使っていきましょう」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
Python
Pythonのカスタム例外を作成する方法を完全解説!初心者でもわかる独自のExceptionクラス入門
New2
PHP
PHP の型変換を完全ガイド!初心者でもわかる明示的変換・自動変換
New3
PHP
PHPの真偽値と条件判定をやさしく解説!初心者でもわかるempty・isset・is_nullの使い方
New4
PHP
PHP の file_get_contents() を使ってファイルを読み込む方法!初心者でもできる簡単なファイル操作
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonのfinally文を徹底解説!例外発生時でも実行される処理の書き方と使い方
No.2
Java&Spring記事人気No2
Python
Pythonのクラスメソッドと静的メソッドの違いとは?初心者でも迷わない使い分けガイド
No.3
Java&Spring記事人気No3
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Python
Pythonの書き方を基本から解説!はじめてのPythonプログラム
No.5
Java&Spring記事人気No5
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.6
Java&Spring記事人気No6
PHP
初心者向けPHP の MySQL のデータを更新する方法(UPDATE 文)完全ガイド
No.7
Java&Spring記事人気No7
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.8
Java&Spring記事人気No8
PHP
PHP の MySQL 接続の基本(mysqli, PDO)を完全解説!初心者向けガイド