Saya menganalisis beberapa kode Python dan saya tidak tahu apa
pop = population[:]
cara. Apakah itu seperti daftar array di Java atau seperti array dua dimensi?
Saya menganalisis beberapa kode Python dan saya tidak tahu apa
pop = population[:]
cara. Apakah itu seperti daftar array di Java atau seperti array dua dimensi?
Jawaban:
Ini adalah contoh notasi irisan, dan fungsinya tergantung pada jenisnya population
. Jika population
berupa daftar, baris ini akan membuat salinan daftar yang dangkal . Untuk objek bertipe tuple
atau a str
, itu tidak akan melakukan apa-apa (garis akan melakukan hal yang sama tanpa [:]
), dan untuk array (katakanlah) NumPy, itu akan membuat tampilan baru ke data yang sama.
l.copy()
lebih mudah dibaca, tetapi tidak akan berhasil.
list(l)
selalu berfungsi, lebih mudah dibaca, dan dijamin akan mengembalikan salinannya bahkan dengan sesuatu sepertinumpy.array
list.clear()
. Ini akan memakan waktu, meskipun, sampai ini akan mengarah pada pengurangan yang signifikan dari pertanyaan semacam ini pada SO. :)
A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]
, saya hampir selalu lebih suka numpy.rollaxis(A, axis, 0)[k]
. Secara umum, saya jarang menemukan kasus penggunaan di mana Anda perlu membuat slice()
objek secara langsung . Jika Anda tetap membutuhkannya, NumPy menyediakan s_
helper sebagai cara alternatif untuk membuatnya.
Mungkin juga membantu untuk mengetahui bahwa potongan daftar secara umum membuat salinan dari bagian daftar. Misalnya population[2:4]
akan mengembalikan daftar yang berisi populasi [2] dan populasi [3] (pemotongan eksklusif kanan). Meninggalkan indeks kiri dan kanan, karena population[:]
defaultnya masing-masing ke 0 dan panjang (populasi), dengan demikian memilih seluruh daftar. Oleh karena itu, ini adalah ungkapan umum untuk membuat salinan daftar.
baik ... ini sangat tergantung pada konteksnya. Pada akhirnya, itu melewati slice
objek ( slice(None,None,None)
) ke salah satu metode berikut: __getitem__
, __setitem__
atau __delitem__
. (Sebenarnya, jika objek memiliki __getslice__
, itu akan digunakan sebagai pengganti __getitem__
, tapi sekarang sudah usang dan tidak boleh digunakan).
Objek dapat melakukan apa yang mereka inginkan dengan irisan.
Dalam konteks:
x = obj[:]
Ini akan memanggil obj.__getitem__
dengan objek slice yang diteruskan. Faktanya, ini sepenuhnya setara dengan:
x = obj[slice(None,None,None)]
(meskipun yang pertama mungkin lebih efisien karena tidak harus mencari slice
konstruktor - Semuanya dilakukan dalam bytecode).
Untuk sebagian besar objek, ini adalah cara untuk membuat salinan dangkal dari sebagian urutan.
Lanjut:
x[:] = obj
Adalah cara untuk mengatur item (panggilannya __setitem__
) berdasarkan obj
.
dan, saya pikir Anda mungkin bisa menebak apa:
del x[:]
panggilan ;-).
Anda juga dapat memberikan irisan yang berbeda:
x[1:4]
konstruksi slice(1,4,None)
x[::-1]
konstruksi slice(None,None,-1)
dan lain sebagainya. Bacaan lebih lanjut: Jelaskan notasi irisan Python
Ini adalah potongan dari awal urutan sampai akhir, biasanya menghasilkan salinan yang dangkal.
(Yah, ini lebih dari itu , tetapi Anda belum perlu peduli.)
Ini membuat salinan daftar, versus hanya menetapkan nama baru untuk daftar yang sudah ada.
[:]
digunakan untuk pembatas atau pengirisan dalam larik,
misalnya hash :
[1: 5] untuk menampilkan nilai antara 1 inklusif dan 5 eksklusif yaitu 1-4
[start: end]
pada dasarnya digunakan dalam larik untuk mengiris, pahami braket terima variabel yang berarti nilai atau kunci untuk ditampilkan, dan ":" digunakan untuk membatasi atau mengiris seluruh array menjadi paket.
a[1:5]
mengembalikan elemen 1-4, bukan 2-4.