05-Python

Python(Part.ー)| python【リスト内包表記(概要編)】

python| まとめ | 現役エンジニア&プログラミングスクール講師「python」のまとめページです。pythonに関して抑えておきたい知識や文法やにについて記事をまとめています。まとめページの下部には「おすすめの学習書籍」「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中...

目標

(pythonの)「内包表記」について、概要を理解して利用できる。

内包表記

内包表記の概要

内包表記は、Pythonでリストや辞書、集合などのミュータブルなイテラブルオブジェクトをシンプルかつ高速に生成する仕組みです。内包表記では、if文や二重for文を扱って特定の条件に当てはまる要素のみを持たせたり、二重リストを生成することも可能です。

「外延的記述」と「内延的記述」

「外延的記述」と「内延的記述」という言葉は、数学の集合を表すときや、論理学や哲学、言語学などの分野で使われる用語ですが、Pythonやプログラミングにおいても異なる方法でデータを定義(表現)する際に使われます。

外延的記述(Extensionally Defined)

外延的記述とは、ある概念や集合を、その中に含まれる要素(実体)を全て列挙することで定義する方法です。

例:自然数の集合を外延的に定義するとき、「x = { 0, 1, 2, 3, 4, 5,…}」と、その要素をすべて挙げる形になります。

Pythonでの外延的記述の例

# 数字1から5までを外延的に定義したリスト
numbers = [1, 2, 3, 4, 5]

内延的記述(Intensionally Defined)

内延的記述は、ある概念や集合を、その集合に共通する性質や特徴を使って定義する方法です。

例:自然数の集合を内延的に定義するとき、「{ x | x は0以上の整数}」や「{{ x | x は自然数の集合}」といった形で、条件を挙げてその集合を定義します。

「外延的記述」では多くの値を指定することは難しいですが、「内延的記述」ではそれが可能となります。

Pythonでの内延的記述の例

# 1から5までの数字を内延的に定義する
numbers = [x for x in range(1, 6) ]
  • 外延的記述: 集合の具体的な要素を全て列挙して定義する方法。
    例: [1, 2, 3]、{‘apple’, ‘banana’, ‘cherry’}
  • 内延的記述: 集合の共通の性質や条件を使って定義する方法。
    例1: [x for x in range(10) if x % 2 == 0]
    例2:{x for x in range(10) if x > 5}

1.基本的な内包表記

基本的な内包表記は次のように記述します。

# 1から5までの数字を内延的に定義する
numbers = [x for x in range(1, 6)]

次のように「条件から生成した要素」を左の変数部分で演算にかけることもできます。

# 1から5までの平方をリストにする
squares = [x**2 for x in range(1, 6)]
print(squares)  # 出力: [1, 4, 9, 16, 25]

2.条件付き内包表記

内包表記には条件を加えることもできます。例えば、偶数だけを取り出したい場合は次のように書きます。

この場合は先のfor文が動き、作成されたxの値に対してif文が適用されます。
その後、左の変数部分で平方の演算が行われることになります。

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

3.ふたつの繰り返し文を利用する(パターン1)

内包表記でふたつの「for文」を利用すると最初のfor文を1Stepするごとに、次のfor文の繰り返しを全て行うといった動きをします。

# 1から3までの数をそれぞれ3度ずつ繰り返して生成する。
simple_list = [x for x in range(1, 4) for y in range(1, 5)]
print(simple_list)  
# 出力: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]

# 1から3までの数を3度繰り返して生成する。
simple_list = [y for x in range(1, 4) for y in range(1, 5)]
print(simple_list)  
# 出力: [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

4.ふたつの繰り返し文を利用する(パターン2)

内包表記も二重にすると二重リスト(リストの中にリストがある)を生成する事ができます。

内包表記で二重リストを生成しる場合、外側のfor文が先に行われます。具体的に言うと、リスト内包表記が二重になっているとき、ふたつめのfor文が最初に繰り返され、その後、内側のfor文が繰り返されます。

このコードでは、外側のfor y in range(1, 4)が最初に実行され、その1Step毎に、内側のfor x in range(1, 4)が実行されます。

# 1から3までのリストを要素とする、みっつのリストを作成する
matrix = [[x for x in range(1, 4)] for y in range(1, 4)]
print(matrix)  
# 出力: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

# 外側のfor文の1Stepごとを要素とする、みっつのリストを作成する
matrix = [[y for x in range(1, 4)] for y in range(1, 4)]
print(matrix)  
# 出力: [[1, 1, 1], [2, 2, 2], [3, 3, 3]]

内包表記を公式のように表現すると次の通りです。

実行の流れ

  1. 外側のループ (for y in range(1, 4)) が始まり、yが1から3まで繰り返されます。
  2. 各yに対して、内側のfor x in range(1, 4)が実行され、xが1から3まで繰り返されます。

具体的には、最初にy=1となり、内側のループが実行されて、xが1から3まで繰り返されます。次に、y=2のときに内側のループが再び実行され、同様にx=1からx=3まで繰り返されます。最後に、y=3で同様の処理が行われます。

4.条件付きの二重リスト

二重リストに条件を追加することもできます。例えば、内側のリストで条件を追加したい場合、次のように書けます。

# 1から3までの整数を使って、条件付きで内側のリストを作成
matrix_filtered = [[x * y for x in range(1, 5) if x % 2 == 0] for y in range(1, 4)]
print(matrix_filtered)  
# 出力: [[2, 4], [4, 8], [6, 12]]

この例では、内側のリストでx % 2 == 0という条件を使って偶数のみにしています。

今回は以上になります。

「python」おすすめ書籍 ベスト3 | 現役エンジニア&プログラミングスクール講師「python」の学習でお勧めしたい書籍をご紹介しています。お勧めする理由としては、考え方、イメージなどを適切に捉えていること、「生のpython」に焦点をあてて解説をしている書籍であることなどが理由です。勿論、この他にも良い書籍はありますが、特に質の高かったものを選んで記事にしています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST