未分類

【Python】第2章第9回:リスト内包表記の基礎

Pythonのリスト内包表記は、短く効率的にリストを作成できる便利な方法です。本記事では、基本的な構文から応用例までを解説します。

0. 記事の概要

この記事を読むメリット

  • リスト内包表記の基本を理解:リスト作成を効率化する方法を学べます。
  • コードの可読性向上:複雑なリスト操作を簡潔に記述できます。
  • 応用力を向上:条件式やネストを活用した高度な使い方を習得できます。

この記事で学べること

  • リスト内包表記の基本構文
  • 条件式を含むリスト内包表記
  • ネストされたリスト内包表記の応用例

1. リスト内包表記の基本

1.1 基本的な構文

リスト内包表記は、ループや条件式を一行で記述できるシンプルな方法です。

# リスト内包表記の基本例
squares = [x ** 2 for x in range(5)]
print(squares)  # 出力: [0, 1, 4, 9, 16]
動作解説
  1. range(5)で生成された値をxに代入します。
  2. x ** 2で各値を二乗し、新しいリストに追加します。

1.2 通常のループとの違い

リスト内包表記を使用することで、通常のループに比べて簡潔に記述できます。

# 通常のループ
squares = []
for x in range(5):
    squares.append(x ** 2)
print(squares)

# リスト内包表記
squares = [x ** 2 for x in range(5)]
print(squares)

2. リスト内包表記の応用例

2.1 条件式を含むリスト内包表記

条件式を使用して、特定の要素のみをリストに追加できます。

# 条件式付きのリスト内包表記
even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers)  # 出力: [0, 2, 4, 6, 8]
動作解説
  1. x % 2 == 0の条件を満たす場合にのみ、リストに値を追加します。
  2. 結果として、偶数のみがリストに含まれます。

2.2 ネストされたリスト内包表記

リスト内包表記はネストして使用することも可能です。例えば、二次元リストを作成できます。

# ネストされたリスト内包表記
matrix = [[x * y for y in range(1, 4)] for x in range(1, 4)]
print(matrix)
# 出力: [[1, 2, 3], [2, 4, 6], [3, 6, 9]]
動作解説
  1. 外側のループでxを生成し、内側のループでyを生成します。
  2. x * yの計算結果が二次元リストとして格納されます。

3. 実践例:リスト内包表記を活用したプログラム

リスト内包表記を使用して、アルファベットを条件付きでリストに追加するプログラムを作成します。

# アルファベットのフィルタリング
letters = [chr(x) for x in range(65, 91) if x % 2 == 0]
print(letters)  # 出力: ['B', 'D', 'F', 'H', 'J', ...]
動作解説
  1. range(65, 91)でアルファベットのASCIIコードを生成します。
  2. x % 2 == 0の条件を満たす値をリストに追加します。
  3. chr(x)でASCIIコードを文字に変換します。

4. 練習問題

以下の課題に挑戦してみましょう。

  1. リスト内包表記を使用して、1から100までの奇数をリストに格納してください。
  2. ネストされたリスト内包表記を使用して、3×3の掛け算表を作成してください。

5. 練習問題の解答と解説

問1の解答例

# 奇数をリストに格納
odd_numbers = [x for x in range(1, 101) if x % 2 != 0]
print(odd_numbers)

問2の解答例

# 3x3の掛け算表
multiplication_table = [[x * y for y in range(1, 4)] for x in range(1, 4)]
print(multiplication_table)

6. まとめ

Pythonのリスト内包表記を使用することで、効率的で読みやすいコードを記述できます。基本を押さえた上で、応用例にも挑戦してみてください。