web-dev-qa-db-ja.com

どういう意味?

私はいくつかのPythonコードを分析していますが、何がわからない

pop = population[:]

手段。 Javaの配列リストのようなものですか、二次元配列のようなものですか?

83
andriy

これはスライスであり、その動作はpopulationのタイプによって異なります。 populationがリストの場合、この行はリストのコピーを作成します。タイプTupleまたはstrのオブジェクトの場合、何も行いません(行は[:]なしで同じことを行います)、(たとえば)NumPy配列の場合、同じデータに新しいビューを作成します。

102
Sven Marnach

また、一般的にリストスライスがリストの一部のコピーを作成することを知るのに役立つかもしれません。例えば。 population[2:4]は、population [2]およびPopulation [3]を含むリストを返します(スライスは右排他的です)。 population[:]のように、左と右のインデックスを残して、それぞれデフォルトで0とlength(population)になり、リスト全体を選択します。したがって、これはリストのコピーを作成する一般的なイディオムです。

27
ThomasH

まあ...これは本当にコンテキストに依存します。最終的に、 slice オブジェクト(slice(None,None,None))を次のメソッドのいずれかに渡します。 ___getitem___ 、- ___setitem___ または ___delitem___ 。 (実際には、オブジェクトに ___getslice___ がある場合、それは___getitem___の代わりに使用されますが、現在では非推奨であり、使用すべきではありません)。

オブジェクトは、スライスを使用して必要な処理を実行できます。

以下のコンテキストで:

_x = obj[:]
_

これは、スライスオブジェクトを渡して_obj.__getitem___を呼び出します。実際、これは次と完全に同等です。

_x = obj[slice(None,None,None)]
_

(前者はおそらくsliceコンストラクターをルックアップする必要がないため、おそらくより効率的ですが、すべてバイトコードで実行されます)。

ほとんどのオブジェクトでは、これはシーケンスの一部の浅いコピーを作成する方法です。

次:

_x[:] = obj
_

objに基づいて項目を設定する方法です(___setitem___を呼び出します)。

そして、おそらくあなたは何を推測できると思います:

_del x[:]
_

;-)を呼び出します。

異なるスライスを渡すこともできます:

_x[1:4]
_

slice(1,4,None)を構築します

_x[::-1]
_

slice(None,None,-1)などを構築します。さらに読む: Pythonのスライス表記を説明する

14
mgilson

これは、シーケンスの先頭から末尾まで スライス であり、通常は浅いコピーを生成します。

(まあ、それは それ以上 ですが、まだ気にする必要はありません。)

既存のリストに新しい名前を割り当てるのではなく、リストのコピーを作成します。

6
Jim Brissom

[:]
リミッターまたは配列のスライス、ハッシュに使用
例えば:
[1:5] 1から5までの値、つまり1から4までの値を表示します
[始まりと終わり]

基本的にスライスで配列に使用され、表示する値またはキーを意味するブラケット受け入れ変数を理解し、「:」は配列全体をパケットに制限またはスライスするために使用されます。