Pythonのリスト内包表記はメモリ効率の良い方法で減少しますか?
質問
私はPythonの初心者です。これが私の最初の投稿なので、厳しすぎないでください:)。私は最近Pythonで遊んでいて、次のようなものがあるかどうか疑問に思っていました ジェネラコディセタグプレ
Pythonは最初にすべての要素のリストを作成し、次に最大値を見つけてO(2n)時間になるか、またはΘ(n)を繰り返しているときに最大値を追跡します。また、Python3では範囲が異なるため(反復可能であるため)、Python2とは異なりますか?
解決
この例では、Pythonが最初にリスト全体を作成します。それを避けたい場合は、代わりにジェネレータ式を使用できます: ジェネラコディセタグプレ
または単に: ジェネラコディセタグプレ
もちろん(Python 2では)range
自体がリスト全体を作成するため、この場合に本当に必要なのは次のとおりです。
ジェネラコディセタグプレ
ただし、かかる時間に関しては、これらの式はすべて同じ複雑さを持っています。重要な違いは、最後のものはO(1)スペースを必要とするのに対し、他のものはO(n)スペースを必要とすることです。
他のヒント
リスト内包表記は常にリストを生成します(何かが例外をスローしない限り)。ほとんどの場合、代わりにジェネックスを使用することをお勧めします。 ジェネラコディセタグプレ
所属していません StackOverflow