Pythonリストの中にfor文やif文を記述しリストの生成などをより簡潔にすることができます。複数行のコーディングが1行で済むのでシンプルになります。
リスト内包表記
Pythonでリストを扱うときは必ずといっていいほど繰り返し文を使います。
普通にコーディングするとfor文はインデントしたブロックを伴うので複数行の記述が必要になります。
内包表記を使うとこれを1行で書くことができます。
例えば、16の倍数リストを作るとします。
>>> hex = []
>>> for x in range(1,9):
... hex.append(x*16)
...
>>> hex
[16, 32, 48, 64, 80, 96, 112, 128]
for文を使ってそのブロックでリストの要素を追加するメソッドを実行することで16の倍数リストができます。
このときfor文で使っている変数xはfor文で処理後も残ります。
これを内包表記で記述すると以下になります。
>>> hex = [x*16 for x in range(1,9)]
>>> hex
[16, 32, 48, 64, 80, 96, 112, 128]
内包表記で使っている変数xも残りません。
内包表記の記述方式は以下です。
[ 式 for 繰り返し変数 in シーケンス ]
文字列を数値に置き換えながらリストを作るのにも便利です。
>>> strheight = "170,168,180,175,165"
>>> height = [int(x) for x in strheight.split(',')]
>>> height
[170, 168, 180, 175, 165]
内包表記にif文を含むこともできます。
if文の条件にあったリストを作ります。
>>> strheight = "170,168,180,17x,165"
>>> height = [int(x) for x in strheight.split(',') if x.isdigit()]
>>> height
[170, 168, 180, 165]
記述方式は以下です。
[ 式 for 繰り返し変数 in シーケンス if 条件式 ]
また多次元のリストを作るときにも便利です。
>>> data = [[x+y*3 for x in range(3)] for y in range(4)]
>>> data
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]
初期値0でリストを作るのであれば、
[[0 for x in range(3)] for y in range(4)]
となります。
最後に
Pythonのリストはいろいろな処理の幅が増えますが、内包表記を使うことでよりシンプルなコーディングをすることが可能です。
他の言語ではあまり見慣れない記述方式かもしれませんが、使っていると慣れてくると思います。