5.2.4 リスト表現

リスト表現は、角括弧で囲われた式の系列です。系列は空の系列であっても かまいません:

test ::= and_test ( "or" and_test )* | lambda_form
testlist ::= test ( "," test )* [ "," ]
list_display ::= "[" [listmaker] "]"
listmaker ::= expression ( list_for | ( "," expression )* [","] )
list_iter ::= list_for | list_if
list_for ::= "for" expression_list "in" testlist [list_iter]
list_if ::= "if" test [list_iter]
Download entire grammar as text.

リスト表現は、新に作成されたリストオブジェクトを表します。 新たなリストの内容は、式のリストを与えるか、リストの内包表記 (list comprehension) で指定します。 カンマで区切られた式のリストを与えた場合、リストの各要素は左から 右へと順に評価され、評価された順番にリスト内に配置されます。 リストの内包表記を与える場合、内包表記はまず単一の式、続いて 少なくとも一つの for 節、続いてゼロ個以上の for 節か、if 節になります。 この場合、新たに作成されるリストの各要素は、各々の forif 節を左から右の順にネストしたブロックとみなして実行し、 ネストの最内ブロックに到達する度に式を評価した値となります。 5.1



... ネストの最内ブロックに到達する度に式を評価した値となります。5.1
Python 2.3 では、リスト内包が "for" の中で使う制御 変数を内包表記を書いたスコープに「漏らして」しまう仕様になって いました。この挙動は撤廃されたので、将来のバージョンでバグが修正 されれば、この挙動に依存したコードは動作しなくなります。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。