カタバミさんのプログラミングノート

日曜プログラマーがプログラミング関係のメモを記録するブログです。

Python 3のリスト・セット・タプル・辞書の初期化と内包記法、ジェネレーター式

[1,2,3,1,2,3] #リスト
{1,2,3,1,2,3} #セット
(1,2,3,1,2,3) #タプル
{1: 1, "name": "name"} #辞書
[i for i in [1,2,3,1,2,3] if i % 2 == 0] #リスト内包記法
{i for i in [1,2,3,1,2,3] if i % 2 == 0} #セット内包記法
{i*5: i for i in [1,2,3,1,2,3] if i % 2 == 0} #辞書内包記法
(i for i in [1,2,3,1,2,3]) #ジェネレータ式

リスト

[1,2,3,1,2,3], type([1,2,3,1,2,3])
#>>> ([1, 2, 3, 1, 2, 3], <class 'list'>)

セット

{1,2,3,1,2,3}, type({1,2,3,1,2,3})
#>>> ({1, 2, 3}, <class 'set'>)

タプル

1,2,3,1,2,3, type((1,2,3,1,2,3))
#>>> (1, 2, 3, 1, 2, 3, <class 'tuple'>)
(1,2,3,1,2,3), type((1,2,3,1,2,3))
#>>> ((1, 2, 3, 1, 2, 3), <class 'tuple'>)

辞書

{1: 1, "name": "name"}, type({1: 1, "name": "name"})
#>>> ({1: 1, 'name': 'name'}, <class 'dict'>)

リスト内包記法

[i for i in [1,2,3,1,2,3]]
#>>> [1, 2, 3, 1, 2, 3]
[i for i in [1,2,3,1,2,3] if i % 2 == 0]
#>>> [2, 2]

セット内包記法

{i for i in [1,2,3,1,2,3]}
#>>> {1, 2, 3}
{i for i in [1,2,3,1,2,3] if i % 2 == 0}
#>>> {2}

辞書内包記法

{i*5: i for i in [1,2,3,1,2,3]}
{i*5: i for i in [1,2,3,1,2,3] if i % 2 == 0}
#>>> {5: 1, 10: 2, 15: 3}
#>>> {10: 2}

ジェネレータ式

(i for i in [1,2,3,1,2,3])
#>>> <generator object <genexpr> at 0x0330F878>
list((i for i in [1,2,3,1,2,3]))
#>>> [1, 2, 3, 1, 2, 3]
list((i for i in [1,2,3,1,2,3] if i % 2 == 0))
#>>> [2, 2]

他の書き方

内包記法で書かれるものは他の方法でも記述することができます。例えば、リストはmap関数とlambdaの組み合わせで次のように書けます。

list(map(lambda i: i, range(5)))
#>>> [0, 1, 2, 3, 4]

参考