【Python初学者】内包表記とは?リスト・集合・辞書内包表記について解説!

この記事は、プログラミング初学者が学びのアウトプットを兼ねてまとめた内容です。
どうもわだですこの記事では、
「リスト・集合内・辞書内包表記の基本構文と使い方」について
初学者目線で解説します。
内包表記とは?
for文やif文を含んだコードをシンプルに書ける構文のことです。
内包表記には、リスト内包表記、集合内包表記、辞書内包表記といった種類があります。
リスト内包表記の基本構文
[式 for 変数 in イテラブル if 条件]
・リストなので[ ]を使います
・式: 新しいリストの各要素をどのように生成するかを書きます
・for 変数 in イテラブル: 元のデータを順番に取り出すと言う意味です
・if 条件: 条件を指定したいときに書きます(省略可能)
使い方の例(通常のfor文と比較)
✏️リストの要素を2乗してリストで返す
通常のfor文の場合
numbers = [1, 2, 3, 4, 5]
squares = [ ]
for n in numbers:
squares.append(n ** 2)
print(squares) # [1, 4, 9, 16, 25]
リスト内包表記
numbers = [1, 2, 3, 4, 5] squares = [n ** 2 for n in numbers] print(squares) # [1, 4, 9, 16, 25]
if文で条件分岐
numbers = [1, 2, 3, 4, 5, 6] odds = [n for n in numbers if n % 2 == 1] print(odds) # [1, 3, 5]
if~elseで条件を満たさないときにも処理したい場合
numbers = [1, 2, 3, 4, 5, 6] data = [n if n % 2 == 1 else 0 for n in numbers] print(date) # [1, 0, 3, 0, 5, 0]
文字列を使う
text = "Python” letters = [c.upper( ) for c in text] print(letters) # ['P', 'Y', 'T', 'H', 'O', 'N']
集合内包表記の基本構文
{式 for 変数 in イテラブル if 条件}
・集合なので{ }を使います
・if条件は省略可能です
・重複は自動的に取り除かれます
使い方の例
リストの要素を2乗して集合にする
numbers = [1, 2, 3, 4, 4, 5]
squares = {n ** 2 for n in numbers}
print(squares) # {1, 4, 9, 16, 25}
if文で条件分岐
odds = {n for n in range(1, 11) if n % 2 == 1}
print(odds) # {1, 3, 5, 7, 9}
文字列を使う
text = "programming"
vowels = {c for c in text if c in "aiueo"}
print(vowels) # {'i', 'a', 'o'}や{'o', 'a', 'i'}
辞書内包表記の基本構文
{キー: 値 for 変数 in イテラブル if 条件}
・辞書なので{キー: 値}を使います
・if条件は省略可能です
使い方の例
数字とその2乗の辞書を作る
squares = {n : n ** 2 for n in range(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
文字列のアルファベットの出現回数を調べる
text = "wada"
counter = {c : text.count(c) for c in set(text)}
print(counter) # {'w': 1, 'a': 2, 'd': 1}



ちょっと待って!
どうしてtextではなくset(text)なのかわからない人いませんか?
(わだのための備忘録も兼ねて書いておきます。)
(師匠に教えていただいたことをそのまま失礼します。)
ポイントは処理の「効率」だよ!
for c in textの場合、
実行すると”w”, “a”, “d”, “a”と1つ目から最後のアルファベットまで全部、つまり”a”は2回処理されることになる。
for c in set(text)の場合、
setは重複を除いた文字をループ、つまり”w”, “a”, “d”それぞれが1回だけ処理されることになる。
辞書は重複するキーはもてないから、すでに同じキーが存在するときは上書きされて、実行結果は同じになるけれど、処理の量に差があるよね!
今回のように小さなデータではsetの必要性を理解しにくいけど、大きなデータを扱うことをイメージすると、setの重要さがわかってくるんじゃないかい?



つまり、無駄をなくして効率的に処理をするためにset(text)を使うということだね!
if文で条件分岐
squares = {n : n ** 2 for n in range(1, 6) if n % 2 == 1}
print(squares) # {1: 1, 3: 9, 5: 25}
【Python初学者】シリーズの他の記事はこちらから
最後に
どうも、プログラミング初学者のわだです。最後までお読みいただきありがとうございました。この記事は、学びを整理しながら理解を深めるために書いています。まだ駆け出しではありますが、同じように勉強している方の参考になれば嬉しいです。もし誤りや補足があれば、教えていただけると幸いです。










コメント