web-dev-qa-db-ja.com

Python 3レンジVs Python 2レンジ

私は最近python 3。
In python 2range()関数を使用して、リスト要素を割り当てることができます。

_>>> A = []
>>> A = range(0,6)
>>> print A
[0, 1, 2, 3, 4, 5]
_

pythonのようにrange()関数が使用されている場合、これが発生しています

_>>> A = []
>>> A = range(0,6)
>>> print(A)
range(0, 6)
_

なんでこんなことが起こっているの?
なぜpythonこの変更を行うのですか?
それは恩恵ですか、それとも悩みですか?

8

Python 3は、イテレータを使用しますpython 2used listsdocs は、rangeへの変更を含む詳細な説明を提供します。

利点は、Python 3が大きな範囲の反復子またはマッピングを使用している場合、メモリを割り当てる必要がないことです。例えば

for i in range(1000000000): print(i)

python 3.で必要なメモリがはるかに少なくなります。たまたまPython

list_of_range = list(range(10))
17
Sam Hartman

python 2では、rangeは組み込み関数です。以下は 公式python docs からのものです。リストを返します。

range(stop)
range(start、stop [、step])
これは、算術級数を含むリストを作成するための汎用機能です。ほとんどの場合、forループで使用されます。

また、 xrange python 2にのみ存在することを確認することもできます。これは、主に高速反復のためにxrangeオブジェクトを返します。

xrange(停止)
xrange(start、stop [、step])
この関数はrange()に非常に似ていますが、リストの代わりにxrangeオブジェクトを返します。

ちなみに、python 3はこれら2つを1つのrangeデータ型にマージし、python 2.のxrangeと同様に機能します。 ドキュメント をチェックします。

2
Leonard2

Python 3 range()関数は、python 2 xrange() function not range()と同等です]

説明

In python 3ほとんどの関数は、メモリを節約するためにpython 2のようにリストではないIterableオブジェクトを返します。これらのいくつかはZip()filter()map()を含む.keys .values .items()辞書メソッドしかし、反復可能なオブジェクトは、何度も反復しようとすると効率的ではないため、list()メソッドを使用してそれらをリストに変換できます

0
Emmanuel Mtali