2015年10月2日金曜日

Pythonのリスト内包表記

例の回文の件で処理速度を早くするためにforが早くするにはとしらべていたらリスト内包表記がわりと速いらしい。
先に処理の比較を見た限りifを入れると結局は微妙な早さっぽい。

でもまぁまずは「リスト内包表記」なるものを使ったことが無い為調べる事に。
要約すると「作成済みのリストから条件をつけつつリストアップしながらさらに値に変更を加えつつ新しいリストを作成する事が出来る」です。

解りずらいので実際の式
mylist=range(5)
newlist=[x+2 for x in mylist if x > 2]
みたいな感じです。

変数=[xに変更を加えて格納 if x in 抽出元リスト if xが~なら]

処理順は右側、左側、中央
上の処理を順にみていきましょう

mylist=range(5)
newlist=[x+2 for x in mylist if x > 2]
先ずは右の処理からここはmylistからの抽出条件です。
forとinの間にある変数が対象各処理における変数で指定できます。

初回ループは0なので
if 0 > 2
となる為スキップします。
if 1>2
if 2>2
もスキップ

ついに抽出条件になりました。
if 3>2

続けて格納する前に処理を加える事が出来ます。
newlist=[x+2 for x in mylist if x > 2]
続けて左側、今回の場合は
3+2つまり5がリストに格納されます。

同じように次は4が処理され
4+2で6が格納されます。

>>>print(newlist)
[5,6]
となります。



・・・なるほどこれは便利そう。ただ、なかなか見づらいですね。

0 件のコメント:

コメントを投稿