私はPythonの初心者ですが、これが私の最初の投稿なので、厳しすぎないでください:)。私は最近Pythonで遊んでいて、次のようなものがあるかどうか疑問に思っていました
max([x for x in range(25)])
Pythonは最初にすべての要素のリストを作成し、次に最大値を見つけてO(2n)時間になるか、またはΘ(n)を反復しているときに最大値を追跡します。また、範囲はPython3(反復可能)で異なるため、Python2とは異なりますか?
この例では、Pythonが最初にリスト全体を作成します。それを避けたい場合は、代わりにジェネレータ式を使用できます。
max((x for x in range(25)))
または単に:
max(x for x in range(25))
もちろん(Python 2では)range
それ自体がリスト全体を作成するので、この場合に本当に必要なのは次のとおりです。
max(x for x in xrange(25))
ただし、かかる時間に関しては、これらの式はすべて同じ複雑さを持っています。重要な違いは、最後のものはO(1)スペースを必要とするのに対し、他のものはO(n)スペースを必要とすることです。
リスト内包表記は常にリストを生成します(何かが例外をスローしない限り)。ほとんどの場合、代わりにジェネックスを使用することをお勧めします。
max(x for x in xrange(25))