LoginSignup
3
2

More than 5 years have passed since last update.

for文を内包表記で実装してみた

Last updated at Posted at 2018-01-28

ファイルは政府の統計情報から適当に取得
https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei=00200521&tstat=000001080615&cycle=0&tclass1=000001089055&tclass2=000001089056

# for文で繰り返し
list1=[]       
with open("/python/001_01.csv", encoding="cp932") as f:
    for line in f:
        list1.append(line)

# 内包表記で繰り返し
# list2=[]  Dsuke-Kさんのコメント通り、内包では初期化は不用でした
with open("/python/001_01.csv", encoding="cp932") as f:
    list2=[line for line in f]

if list1 == list2:
    print("同じ")
else:
    print("異なる")

結果は"同じ"となった。

for文で繰り返しと内包表記が同じ結果であることを確認

list2=[line for line in f]
はcsvファイルを読み込んだfから一行取り出し、2つ目のlineにセット、それをそのままlineとして、list2にセットしている。

少しわかりずらいので、ちょっと修正。

# for文で繰り返し
# 内包表記で繰り返し
# list2=[]   Dsuke-Kさんのコメント通り、内包では初期化は不用でした
with open("/python/001_01.csv", encoding="cp932") as f:
    list2=[line+"++add++" for line in f]

ipdb> list2[0]
'1,"平成27年国勢調査人口等基本集計(総務省統計局)","","","","","","","","","","","","","","",""\n++add++'

list2=[line+"++add++" for line in f]
はcsvファイルを読み込んだfから一行取り出し、2つ目のlineにセット、それの後ろに"++add++"を追加してlineとして、list2にセットしている。
こちらのほうがわかりやすい。

普通にファイルを読み込んでリストに入れるだけなら、list2=[line for line in f]で良い。

3
2
2

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
3
2