元セブ島在住のエンジニアの僕「Tommy」が、プログラミング・英語・セブ事情を発信するブログ

Tommy's blog

【Python】内包表記でfor文を使う【→プログラム初心者向け】

11月 18, 2019

プログラム女子
ネットで見たんだけど、「内包表記」ってどんなメリットがあるんですか?
「内包表記」は処理速度向上と、コード全体を俯瞰することができるメリットがあるPythonの「プログラムの書き方」のことだよ。今回はこの「内包表記」について説明するね。
Tommy

この記事で分かること

  • 内包表記の書き方が分かる
  • 内包表記を使うべき時が分かる

Pythonの内包表記でfor文を使う概要

ここでは、Pythonの「内包表記」の書き方について説明します。内包表現は英語で「list comprehension」です。

主にFor文を使った内包表記の例を説明しますが、処理速度向上と、コード全体を俯瞰することができる(For文の中身はあまり重要視しない)という意味でソースコードの可読性向上に期待ができます。

Pythonの内包表記でfor文を使う前提環境

Pythonで内包表記の使い方の前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。

レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

Pythonの内包表記でfor文を使うサンプルプログラム

内包表記の使い方の具体例を説明します。内包表記の効果を説明するために、「内包表記を使わない例」と「内包表記を使った例」を使った例を比較しながら、それぞれを説明します。

内包表記を使わないサンプルプログラム

まず、内包表記を使わない普通のFor文を使い、配列を1つずつ取出し、絶対値計算をして、リストに再び格納するという処理のサンプルコードとその結果を示します。説明は次の順番で説明します。

  1. 内包表記を使わないサンプルプログラムの作成
  2. 内包表記を使わないサンプルプログラムの実行結果

1.内包表記を使わないサンプルプログラムの作成

まずは、「内包表記」を使わない例のサンプルソースコードです。ソースコードの内容は下記の順番で動作するようにします。

if __name__ == '__main__':

	number_list = [-1,-2,-3,-4,-5]
	print(number_list)
	after_list1 = []
	for number in number_list:
		after_list1.append(abs(number))
	print(after_list1)

  1. 変数「number_list」を-5から-1までの整数のリストで初期化する。
  2. 変数「number_list」の内容を表示する。
  3. 変数「after_list1」を空のリストで初期化する。
  4. 「number_list」を1つずつ変数「number」に格納しながら、次の処理を繰り返す。
    1. 変数「number」の絶対値を変数「number_list」に追加する。
  5. 変数「after_list1」の内容を表示する。

2.内包表記を使わないサンプルプログラムの実行結果

下の表示のように、変数「number_list」の内容が1行目、変数「after_list1」の内容が2行目に表示されています。

[-1, -2, -3, -4, -5]
[1, 2, 3, 4, 5]

内包表記を使ったサンプルプログラム

次に、先程行った配列を1つずつ取出し、絶対値計算をして、リストに再び格納するという処理を、内包表記を使った例で示します。説明は次の順番で説明します。

  1. 内包表記を使った例のサンプルプログラムの作成
  2. 内包表記を使ったサンプルプログラムの実行結果

1.内包表記を使った例のサンプルプログラムの作成

次は、「内包表記」を使わった例のサンプルソースコードです。ソースコードの内容は下記の順番で動作するようにします。

if __name__ == '__main__':

	number_list = [-1,-2,-3,-4,-5]
	print(number_list)
	after_list2 = [abs(number) for number in number_list]
	print(after_list2)

  1. 変数「number_list」を-5から-1までの整数のリストで初期化する。
  2. 変数「number_list」の内容を表示する。
  3. 変数「after_list2」を空のリストで初期化する。
  4. 「number_list」を1つずつ変数「number」に格納し、変数「number」の絶対値で変数「after_list2」のリストを初期化する。
  5. 変数「after_list2」の内容を表示する。

2.内包表記を使ったサンプルプログラムの実行結果

上の内包表記を使ったプログラムでも、下の表示のように、変数「number_list」の内容が1行目、変数「after_list2」の内容が2行目に表示されています。

これで内容表記を用いると、for文を回さないで短い行で「after_list2」のようなリスト変数を作ることができることが分かりました。

[-1, -2, -3, -4, -5]
[1, 2, 3, 4, 5]