読者です 読者をやめる 読者になる 読者になる

Works by ...

プログラミング関連でメモする

【python】リスト・ジェネレータ・集合・辞書内包表記

リスト・ジェネレータはともかく、辞書なんかはたまに忘れるのでメモ。

In [1]: array = [1, 2, 3, 4, 5, 6, 7]

# リスト
In [2]: [a*a for a in array]
Out[2]: [1, 4, 9, 16, 25, 36, 49]

# ジェネレータ
In [3]: (a*a for a in array)
Out[3]: <generator object <genexpr> at 0x1041c10a0>

# 集合
In [4]: {a*a for a in array}
Out[4]: {1, 4, 9, 16, 25, 36, 49}

# 辞書
In [5]: {a:a*a for a in array}
Out[5]: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49}

あと余談ですが、ジェネレータはリスト内包表記で生成するリストが肥大化してしまうような時におすすめです。

# リスト
# a=... の時点で全要素分のメモリを確保
# メモリを食うし、末尾近傍の要素は使わないかもしれない
a = [i*i for i in range(2 ** 10 * 10000000)]  

# ジェネレータ
# b=... の時点では要素の生成は発生しない
b = (i*i for i in range(2 ** 10 * 10000000)) 
b.next() # ここで初めて要素生成