0
0

この記事を書いたきっかけ

Pythonでプログラミングの練習をしています。一般的なリストや辞書を書くことには慣れてきましたが、内包表記にはなかなか慣れません。内包表記を使ってリストや辞書をうまく書くには、その構造をよく理解して何度も練習する必要があります。

そこで、内包表記の書き方を簡単にまとめたいと思い、記事にしました。


オススメの記事

内包表記とは

内包表記とは、Pythonにおいてイテラブル(例えばリスト、辞書、集合など)から新しいイテラブルを簡潔に生成するための構文です。読みやすいコードを簡単に書くことができます。

1. リスト内包表記

リストから新しいリストを作成する際に使います。条件を加えてフィルタリングや要素の変換ができます。

コード例 

# 0から9までの数値の二乗をリストにする
squares = [x**2 for x in range(10)]
print(squares)  # 出力: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

条件付きの例

# 0から9までの偶数の二乗をリストにする
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # 出力: [0, 4, 16, 36, 64]

2. 辞書内包表記

辞書やリスト、タプルなどから新しい辞書を作成する際に使います。

コード例

# 0から9までの数値とその二乗のペアを持つ辞書を作成
square_dict = {x: x**2 for x in range(10)}
print(square_dict)  # 出力: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

条件付きの例

# 0から9までの偶数とその二乗のペアを持つ辞書を作成
even_square_dict = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_square_dict)  # 出力: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

3. 集合内包表記

イテラブルから新しい集合を作成する際に使います。重複を自動的に排除します。

コード例

# 文字列内の文字を大文字に変換し、重複を排除して集合にする
unique_chars = {char.upper() for char in "hello world"}
print(unique_chars)  # 出力: {'L', 'O', 'E', 'R', 'H', 'W', 'D'}

条件付きの例

# 文字列内の母音を大文字に変換し、重複を排除して集合にする
vowels = {char.upper() for char in "hello world" if char in 'aeiou'}
print(vowels)  # 出力: {'O', 'E'}

ネストした内包表記

1. ネストしたリスト内包表記

2次元リストのような複雑なデータ構造を平坦化する場合や、ネストしたループで新しいリストを作成する場合に使用します。

コード例

# 2次元リストを1次元リストに平坦化する
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)  # 出力: [1, 2, 3, 4, 5, 6, 7, 8, 9]

条件付きの例

# 2次元リストから偶数だけを取り出して1次元リストに平坦化する
even_flattened = [num for row in matrix for num in row if num % 2 == 0]
print(even_flattened)  # 出力: [2, 4, 6, 8]

2. ネストした辞書内包表記

辞書のキーと値を複雑な変換を行いたい場合や、ネストしたループを使用して新しい辞書を作成する場合に使用します。

コード例

# ネストした辞書を作成
nested_dict = {(i, j): i * j for i in range(3) for j in range(3)}
print(nested_dict)  # 出力: {(0, 0): 0, (0, 1): 0, (0, 2): 0, (1, 0): 0, (1, 1): 1, (1, 2): 2, (2, 0): 0, (2, 1): 2, (2, 2): 4}

条件付きの例

# 条件を満たすペアのみを含むネストした辞書を作成
filtered_nested_dict = {(i, j): i * j for i in range(3) for j in range(3) if i != j}
print(filtered_nested_dict)  # 出力: {(0, 1): 0, (0, 2): 0, (1, 0): 0, (1, 2): 2, (2, 0): 0, (2, 1): 2}

3. ネストした集合内包表記

ネストしたループで新しい集合を作成する場合に使用します。

コード例

# 2次元リストの全要素を集合に変換
matrix = [[1, 2, 2], [3, 4, 4], [5, 5, 6]]
unique_nums = {num for row in matrix for num in row}
print(unique_nums)  # 出力: {1, 2, 3, 4, 5, 6}

条件付きの例

# 2次元リストから偶数のみを取り出して集合に変換
even_unique_nums = {num for row in matrix for num in row if num % 2 == 0}
print(even_unique_nums)  # 出力: {2, 4, 6}

まとめ

この記事は内包表記をうまく書けるようにするために書きました。ただ、何度も練習しないと内包表記を書けるようになりません。
内包表記を練習してみて、よくわからなくなったら、この記事やリンクのオススメの記事を見直したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0