Python

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

ファイルは政府の統計情報から適当に取得
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]で良い。