8

私はPythonの初心者ですが、これが私の最初の投稿なので、厳しすぎないでください:)。私は最近Pythonで遊んでいて、次のようなものがあるかどうか疑問に思っていました

max([x for x in range(25)]) 

Pythonは最初にすべての要素のリストを作成し、次に最大値を見つけてO(2n)時間になるか、またはΘ(n)を反復しているときに最大値を追跡します。また、範囲はPython3(反復可能)で異なるため、Python2とは異なりますか?

4

2 に答える 2

14

この例では、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)スペースを必要とすることです。

于 2011-03-18T08:52:21.530 に答える
2

リスト内包表記は常にリストを生成します(何かが例外をスローしない限り)。ほとんどの場合、代わりにジェネックスを使用することをお勧めします。

max(x for x in xrange(25))
于 2011-03-18T08:51:38.390 に答える