Python の記法。以下、2.5 系での実験。
for の後ろの変数が仮引数になっていて、for の前で出てくる仮変数は置換される。
>>> range(5) [0, 1, 2, 3, 4] >>> [(x,x) for x in range(5)] [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
>>> [x for x in range(5)] # range(5)と同じ [0, 1, 2, 3, 4]
次の例で a は仮変数でないので普通に 3 となる。
>>> a = 3; [a * x for x in [1,2,3]] [3, 6, 9]
ディクショナリの items() と同じことをリスト内包表記で。。
>>> d = {1:'ichi', 2:'ni', 3:'san'} >>> [(k,v) for k, v in d.items()] [(1, 'ichi'), (2, 'ni'), (3, 'san')] >>> d.items() [(1, 'ichi'), (2, 'ni'), (3, 'san')]
for の前には文は書けないので、print は不可。
>>> [print x for x in range(3)] File "<interactive input>", line 1 [print x for x in range(3)] ^ SyntaxError: invalid syntax
メソッドを定義すれば使える。
>>> def puts(x):print x ... >>> [puts(x) for x in range(3)] 0 1 2 [None, None, None]