私はいくつかのPythonコードを分析していますが、何がわかりません
pop = population[:]
手段。それはJavaの配列リストのようなものですか、それとも二次元配列のようなものですか?
私はいくつかのPythonコードを分析していますが、何がわかりません
pop = population[:]
手段。それはJavaの配列リストのようなものですか、それとも二次元配列のようなものですか?
回答:
これはスライス表記の例であり、その機能はのタイプによって異なりpopulation
ます。population
がリストの場合、この行はリストの浅いコピーを作成します。タイプtuple
またはのオブジェクトの場合str
、それは何もしません(行はなしでも同じように動作し[:]
ます)。(たとえば)NumPy配列の場合は、同じデータに新しいビューを作成します。
l.copy()
もっと読みやすいですが、機能しません。
list(l)
常に機能し、より読みやすく、次のような場合でもコピーが返されることが保証されていますnumpy.array
list.clear()
。ただし、これがSOに関するこの種の質問の大幅な削減につながるまでには、しばらく時間がかかります。:)
A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]
、私はほとんど常に好みnumpy.rollaxis(A, axis, 0)[k]
ます。一般に、slice()
オブジェクトを直接作成する必要があるユースケースに遭遇することはめったにありません。とにかくそれらが必要な場合、NumPyはs_
それらを作成する代替方法としてヘルパーを提供します。
まあ...これは本当にコンテキストに依存します。最終的には、slice
オブジェクト(slice(None,None,None)
)を次のメソッドのいずれかに渡します: __getitem__
、__setitem__
または__delitem__
。(実際には、オブジェクトにがある場合__getslice__
、それはの代わりに使用されますが__getitem__
、現在は非推奨であり、使用すべきではありません)。
オブジェクトはスライスを使って好きなようにできます。
次のコンテキストで:
x = obj[:]
これはobj.__getitem__
、渡されたスライスオブジェクトで呼び出されます。実際、これは次のものと完全に同等です。
x = obj[slice(None,None,None)]
(ただし、前者の方がslice
コンストラクタを検索する必要がないため、おそらくより効率的ですが、すべてバイトコードで行われます)。
ほとんどのオブジェクトでは、これはシーケンスの一部の浅いコピーを作成する方法です。
次:
x[:] = obj
に__setitem__
基づいて(呼び出す)項目を設定する方法obj
です。
そして、私はあなたがおそらく何を推測できると思います:
del x[:]
;-)を呼び出します。
異なるスライスを渡すこともできます:
x[1:4]
構成 slice(1,4,None)
x[::-1]
構成slice(None,None,-1)
など。参考資料: Pythonのスライス表記について説明する
[:]
リミッターまたはスライスでの配列に使用、ハッシュ
例:
[1:5] 1〜5の範囲の値を表示します。つまり、1〜4
[start:end]
は配列で基本的にスライスに使用されます。表示する値またはキー。「:」は配列全体をパケットに制限またはスライスするために使用されます。
a[1:5]
2-4ではなく1-4の要素を返します。