リスト内包表記について勉強中。forループより速いそうで。
DO型並び (スコア:0)
FORTRUNでコンピュータを学んだ者としては、
なぜ implied-DO list; がCには無いのかと、歯がゆい場面がしばしば。
Re: (スコア:0)
30年も経っていたので2bit化けてしまいました。
s/FORTRUN/FORTRAN/
なんで速くなるんですかね (スコア:0)
単にインタプリタ/JITコンパイラの最適化がうんこという以上の、原理的に「内包表記>>>(超えられない壁)>>>forループ」となる何かがあるのでしょうか。あるとしたらそれは機械語上でどのような違いとなって現れるのでしょうか。
Re:なんで速くなるんですかね (スコア:2)
機械語的にどうなるかはわかりませんが、いちいちappendしなくていい、という利点があるのだそうです。私もよく理解できてないですが。
こちらにいろいろ書かれています。Pythonのリスト内包表記をdisる [hatenablog.com]
640GBはすべての人にとって未来永劫充分なメモリだ。
Re: (スコア:0)
どちらもappendはしているけど、内包表記の方は書く必要がない。既に組込になっているから、その分の最適化がされていて速いってことじゃないかな。
でも、それはどの要素に対してもappendを必要としているからであって、ある条件を満たす値のみを取り出してリストを作る場合であれば、appendの実行をいくらか端折れるので、forループの方が速い場合もあるだろう。
もっとも、そういう場合はfilterだけど。