Action unknown: editdoedit

リスト内包表記

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]
list_comprehension.txt · 最終更新: 2013/03/04 16:40 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0