私はいくつかのPythonコードを分析していますが、何がわからない
pop = population[:]
手段。 Javaの配列リストのようなものですか、二次元配列のようなものですか?
これはスライスであり、その動作はpopulation
のタイプによって異なります。 population
がリストの場合、この行はリストのコピーを作成します。タイプTuple
またはstr
のオブジェクトの場合、何も行いません(行は[:]
なしで同じことを行います)、(たとえば)NumPy配列の場合、同じデータに新しいビューを作成します。
また、一般的にリストスライスがリストの一部のコピーを作成することを知るのに役立つかもしれません。例えば。 population[2:4]
は、population [2]およびPopulation [3]を含むリストを返します(スライスは右排他的です)。 population[:]
のように、左と右のインデックスを残して、それぞれデフォルトで0とlength(population)になり、リスト全体を選択します。したがって、これはリストのコピーを作成する一般的なイディオムです。
まあ...これは本当にコンテキストに依存します。最終的に、 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のスライス表記を説明する
既存のリストに新しい名前を割り当てるのではなく、リストのコピーを作成します。
[:]
リミッターまたは配列のスライス、ハッシュに使用
例えば:
[1:5] 1から5までの値、つまり1から4までの値を表示します
[始まりと終わり]
基本的にスライスで配列に使用され、表示する値またはキーを意味するブラケット受け入れ変数を理解し、「:」は配列全体をパケットに制限またはスライスするために使用されます。