Pythonのリスト内包表記の使い方!簡潔にループ処理を書くテクニック
生徒
「Pythonで、あるリストから特定の条件に合う要素だけを取り出したり、新しいリストを作ったりする簡単な方法ってありますか?」
先生
「いい質問ですね。Pythonには『リスト内包表記(list comprehension)』という便利な書き方がありますよ。」
生徒
「リスト内包表記ってなんですか?初めて聞きました!」
先生
「それでは、Pythonのリスト内包表記について、やさしく丁寧に解説していきましょう!」
1. リスト内包表記(list comprehension)とは?
Pythonのリスト内包表記とは、リストを簡潔に作るための書き方です。「内包」とは、何かを中に含むという意味です。リストの中にループや条件式を含めることで、短くて読みやすいコードになります。
たとえば、1から5までの数字を2倍にしたリストを作る場合、通常のfor文では次のように書きます。
result = []
for i in range(1, 6):
result.append(i * 2)
print(result)
このコードの出力結果は次の通りです。
[2, 4, 6, 8, 10]
これと同じ処理を、リスト内包表記を使えば、次のように1行で書くことができます。
result = [i * 2 for i in range(1, 6)]
print(result)
たった1行で、同じ結果が得られます。コードがすっきりして、読みやすくなっていますね。
2. リスト内包表記の基本構文
リスト内包表記の書き方は、次のような構文になっています。
[ 式 for 変数 in イテラブル ]
これは、「イテラブル(繰り返し可能なもの、たとえばrangeやリスト)」から一つずつ要素を取り出して、「式」で処理してリストにする、という意味です。
初心者の方にも分かりやすく言い換えると、
- 式:1つ1つの要素に対してやりたいこと(たとえば2倍にする)
- for:繰り返す合図(「〜の間ずっとやる」)
- in:どこから取り出すか(たとえば1から5まで)
3. 条件付きのリスト内包表記
リスト内包表記では、条件をつけて特定の要素だけを取り出すこともできます。たとえば、1から10までの中から、偶数だけをリストにしたい場合は次のように書きます。
even_numbers = [i for i in range(1, 11) if i % 2 == 0]
print(even_numbers)
if i % 2 == 0 は「iが2で割り切れるときだけ」という意味です。
[2, 4, 6, 8, 10]
このように、「〜なものだけほしい!」という時にもリスト内包表記はとても便利です。
4. 文字列とリスト内包表記の組み合わせ
リスト内包表記は、数字だけでなく文字列(テキスト)にも使えます。たとえば、「Python」という文字列の1文字ずつをリストにしたい場合は、次のように書きます。
chars = [c for c in "Python"]
print(chars)
['P', 'y', 't', 'h', 'o', 'n']
このように、文字列を1文字ずつ処理したいときにもリスト内包表記が使えるんです。
5. リスト内包表記を使うときの注意点
リスト内包表記はとても便利ですが、無理に使いすぎると逆に読みにくくなることがあります。1行が長すぎる場合や、複雑な条件があるときは、普通のfor文を使った方が分かりやすい場合もあります。
また、Pythonの読みやすさ(可読性)を大切にする文化では、コードの見た目も大事です。自分だけでなく、他の人が見ても分かるように書くことを意識しましょう。
6. 実用例:リストから文字数が3文字以下のものだけを抽出
次は、単語のリストから3文字以下の短い単語だけを抜き出す例です。
words = ["cat", "elephant", "dog", "bat", "giraffe"]
short_words = [word for word in words if len(word) <= 3]
print(short_words)
['cat', 'dog', 'bat']
len(word)は「単語の長さ」を表します。このように、リストの中の要素に対して条件をつけて処理するのも得意です。
7. リスト内包表記を使いこなそう
リスト内包表記は、Python初心者でも習得しやすく、コードをシンプルに保てる強力なテクニックです。慣れてくると、自然と使えるようになります。まずは簡単な例から試してみて、少しずつ使い方に慣れていきましょう。
Pythonで繰り返し処理や条件に合ったリストの作成を効率よく書きたいときは、ぜひリスト内包表記を思い出してください。
まとめ
今回の記事では、Pythonのリスト内包表記を中心に、繰り返し処理や条件式を組み合わせて効率よくリストを生成する考え方を学びました。とくに、Pythonという言語が大切にしている「読みやすさ」や「シンプルさ」を実現しながらも、高い表現力をもつ書き方として、リスト内包表記は非常に重要なテクニックです。リスト内包表記は、既存のリストやrangeなどのイテラブルから要素を取り出し、式を使って加工し、必要に応じて条件式で絞り込むこともできるため、短く美しいコードを実現できます。Python初心者にとっても理解しやすく実践に応用しやすい構文であり、日々のプログラミング作業で自然と活用する場面が増えていくでしょう。 また、Pythonのさまざまな処理に応用できることも魅力のひとつです。数値の変換や条件による抽出だけでなく、文字列の分解、リストのフィルタリング、さらには複雑なロジックを伴うデータ整形などにも利用することができます。Pythonでのデータ処理やアルゴリズムを考えるうえで、リスト内包表記を扱えるかどうかは、コードの読み書きの効率を大きく左右します。特にデータ分析やWebアプリケーション開発の現場では、処理の明快さと速度の両方が求められるため、このテクニックの習得は必須と言えるでしょう。 さらに、リスト内包表記はシンプルな書き方でありながら、複雑なループよりも高速に動作することが多いため、パフォーマンス面でもメリットがあります。Pythonで大量のデータを扱う際には、コードの速度や実行効率も無視できません。そうした観点からも、このテクニックを使いこなせることは有利です。ただし、便利とはいえ無理に1行で詰め込みすぎると読みづらくなるため、適切な範囲で使用する意識も大切です。読みやすさとわかりやすさを保ちながら活用していくことが、Pythonのスタイルとして理想的です。 記事の中では、実際に数値を加工したり条件で絞り込んだりする例や、文字列操作に応用する例など、具体的で理解しやすいサンプルを通して学習できました。こうした例は日常的なプログラムでも頻繁に使われる書き方であり、Python入門者が早い段階から身につけておくと、学習の進み具合が格段にスムーズになります。実際にコードを書きながら試すことで、さらに理解が深まるでしょう。
サンプルコードでさらに理解しよう
ここでは、記事の流れと同じスタイルで、簡単な応用コードを掲載します。
# リスト内包表記を使った応用例:5文字以上の単語だけ抽出
words = ["apple", "pen", "banana", "cat", "python", "sun"]
long_words = [w for w in words if len(w) >= 5]
print(long_words)
# 数値の変換:平方を求める
numbers = [1, 2, 3, 4, 5]
squares = [n * n for n in numbers]
print(squares)
これらの例のように、リスト内包表記を覚えておくと、コードが明確になり、処理の流れも把握しやすくなります。Pythonの柔軟な表現力を活かすためにも、日々の学習の中で積極的に使っていくことをおすすめします。
生徒
「今日の内容で、リスト内包表記がどういうものなのかよく分かりました!短く書けて便利なんですね。」
先生
「その通りです。Pythonでは読みやすさを重視するので、リスト内包表記はとても相性の良い書き方ですよ。」
生徒
「条件をつけて抽出したり、文字列にも使えたりと、思っていたより活用場面が多いんですね。」
先生
「ええ。実務でもよく使いますし、データ処理でも大活躍です。まずは簡単な例から慣れていくとよいでしょう。」
生徒
「ありがとうございます!これからPythonのコードを書くときは積極的に使ってみます!」