Python Code Notes

Information by python engineer

リスト内包表記(リスト内for文・if文)の使い方 Python

目次

リスト内包表記の基本

例として、文字列aiueoのそれぞれの文字を、リスト内包表記を使用しない場合と使用する場合でリスト化してみます。

リスト内包表記を使用しない場合

リスト内包表記を使用しない場合は、まず空のリストを作成し、for文とappendメソッドで文字列の各文字をリスト内へ追加していくことになります。

a_gyou = "aiueo"
l = []
for a in a_gyou:
    l.append(a)

print(l)

出力:['a', 'i', 'u', 'e', 'o']

リスト内包表記を使用する場合

次に、リスト内包表記を使用する場合の例を示します。こちらの方法では、空のリストの作成が不要で、appendメソッドも使用しません。リスト内にfor文を記入してリストの要素を追加していきます。

a_gyou = "aiueo"
l = [a for a in a_gyou]
print(l)

出力:['a', 'i', 'u', 'e', 'o']

使用しない場合と比べてコードの行数が少なくなるだけでなく、処理速度も高速になるようなので、可能な限りこちらの表記を使用したほうがよさそうです。

if文の併用

リスト内に、if文も内包させることができます。上記の例で、文字列の中の「"i"」をリストに含めないようにしてみます。

a_gyou = "aiueo"
l = [a for a in a_gyou if a!="i"]
print(l)

出力:['a', 'u', 'e', 'o']

リスト内包表記使用例(csvファイルからリストを作成)

リスト内法表記を用いて、csvファイルの中身をリスト化してみます。

csvファイルは以下の内容は以下の通りで、ファイル名は「tenki.csv」としてカレントディレクトリに保管しておきます。

  • tenki.csv
晴れ, sunny
曇り, cloudy
雨, rainy

次に、上記のcsvを読み込んで1列目をリスト化するコードを書いていきます。

import csv  #1

f = open("tenki.csv", encoding="utf_8") #2
f_reader = csv.reader(f)    #3
tenki = [row[0] for row in f_reader]    #4
print(tenki)    #5

出力:['晴れ', '曇り', '雨']

  1. csvファイル読み取り用組み込みモジュール
  2. ファイルを開く(中身が日本語のため、エンコーディングをutf_8に指定)
  3. csvリーダーオブジェクトを生成
  4. リスト内法表記で、1列目を1行ずつリストに追記
  5. 出力

リスト内包表記を使用することで、非常にスマートにcsvファイルを読み込んでリスト化することができました。

辞書内包表記使用例(csvファイルから辞書を作成)

リストと同様に、辞書も内包表記をすることが可能です。

先ほどのcsvファイルの1列目をキー、2列目をバリューとする辞書を、内包表記を用いて作成していきます。

csvファイルは以下の内容は先ほどと同じで、ファイル名は「tenki.csv」としてカレントディレクトリに保管しておきます。

  • tenki.csv
晴れ, sunny
曇り, cloudy
雨, rainy

このcsvファイルを読込み、1列目をキー、2列目をバリューとする辞書を作成します。

import csv

f = open("tenki.csv", encoding="utf_8")
f_reader = csv.reader(f)
tenki = {row[0]:row[1] for row in f_reader}
print(tenki)

出力:{'晴れ': ' sunny', '曇り': ' cloudy', '雨': ' rainy'}

変更点はtenki = {row[0]:row[1] for row in f_reader}の箇所のみで、辞書内包表記で1列目をキー、2列目をバリューとして、1行ずつ辞書に追記しています。