あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

Pythonのリスト内包表記=>[]や{}

Pythonの基本の基本(データ型やfor,if)などを覚えた後、
コードを読んでいると、なんじゃこりゃ!と思うものがあります。

自分の経験上、一つはwith構文、もう一つがリスト内包表記です。

リスト内包表記とは

リスト内包表記とは以下の様な表記です。

dat = [i for i in range(10)]
print dat
# [0,1,2,3,4,5,6,7,8,9]

Pythonにしては非常に読みにくい表現です。

リスト内包表記は何かと言いますと、
リスト生成を1行で書く表現(ワンライナー)です。

forとの違い

先ほどのリスト内包表記とforを比較して見ましょう。

dat_1 = [i for i in range(10)]
dat_2 = []
for i in range(10):
    dat_2.append(i)

dat_1もdat2も内容は同じリストになります。
じゃあ、forだけでも良いのでは?
と思うのですが、裏で走っている処理に違いがあり、
リスト内包表記の方が処理される速度が早くなります。

対して、for文は様々な処理が書けますから、
複雑な処理を書くにはforを使った方が書き手としては楽です。
(そもそもforはリスト生成以外にも使用しますしね)

▼リストに格納する値をifなどで制御する場合もあります

esu-ko.hatenablog.com

辞書を作成する内包表記

リストではなく辞書を作る場合は、[]ではなく、{}を使用します。

dic = {str(i):i for i in range(10)}
"""
以下と同じ
dic = {}
for i in range(10):
  dic[str(i)] = i
"""

リスト内包表記を用いて、シンプルに書ける場合には積極的に使用しましょう。
逆に初心者であれば、出会うことも多いので、出来る限り早く覚えることが重要です。

▼{}辞書型と関係が深いjsonファイルの扱い方はこちら

esu-ko.hatenablog.com

▼リストや辞書と似た集合(セット)の扱いはこちら esu-ko.hatenablog.com