他の回答者は、ジェネレータ式(リスト内包表記に似ていますが、周囲の角括弧がない表記)を発見したと答えたのは正しかったです。
一般に、genexps(愛情を込めて知られている)は、リスト内包表記よりもメモリ効率が高く、高速です。
ただし、その場合''.join()
、リスト内包表記は高速であり、メモリ効率も高くなります。その理由は、joinはデータに対して2回のパスを行う必要があるため、実際には実際のリストが必要になるためです。あなたがそれを与えるならば、それはすぐにその仕事を始めることができます。代わりにgenexpを指定すると、genexpを実行してメモリ内に新しいリストを作成するまで、作業を開始できません。
~ $ python -m timeit '"".join(str(n) for n in xrange(1000))'
1000 loops, best of 3: 335 usec per loop
~ $ python -m timeit '"".join([str(n) for n in xrange(1000)])'
1000 loops, best of 3: 288 usec per loop
itertools.imapとmapを比較しても、同じ結果が得られます。
~ $ python -m timeit -s'from itertools import imap' '"".join(imap(str, xrange(1000)))'
1000 loops, best of 3: 220 usec per loop
~ $ python -m timeit '"".join(map(str, xrange(1000)))'
1000 loops, best of 3: 212 usec per loop
join
はおそらくCで書かれているので、リスト内包表記よりもはるかに高速に実行されると思います...テスト時間!