Apakah ada cara sederhana untuk mengindeks semua elemen daftar (atau larik, atau apa pun) kecuali untuk indeks tertentu? Misalnya,
mylist[3]
akan mengembalikan item di posisi 3milist[~3]
akan mengembalikan seluruh daftar kecuali 3
Untuk daftar , Anda bisa menggunakan daftar comp. Misalnya, untuk membuat b
salinan a
tanpa elemen ke-3:
a = range(10)[::-1] # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
b = [x for i,x in enumerate(a) if i!=3] # [9, 8, 7, 5, 4, 3, 2, 1, 0]
Ini sangat umum, dan dapat digunakan dengan semua iterable, termasuk array numpy. Jika Anda mengganti []
dengan ()
, b
akan menjadi iterator, bukan daftar.
Atau Anda dapat melakukan ini di tempat dengan pop
:
a = range(10)[::-1] # a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
a.pop(3) # a = [9, 8, 7, 5, 4, 3, 2, 1, 0]
Secara numpy Anda dapat melakukan ini dengan pengindeksan boolean:
a = np.arange(9, -1, -1) # a = array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
b = a[np.arange(len(a))!=3] # b = array([9, 8, 7, 5, 4, 3, 2, 1, 0])
yang secara umum akan jauh lebih cepat daripada pemahaman daftar yang tercantum di atas.
>>> l = range(1,10)
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[:2]
[1, 2]
>>> l[3:]
[4, 5, 6, 7, 8, 9]
>>> l[:2] + l[3:]
[1, 2, 4, 5, 6, 7, 8, 9]
>>>
Lihat juga
numpy.concatenate
.Cara paling sederhana yang saya temukan adalah:
yang akan menghasilkan Anda
mylist
tanpa elemen di indexx
.sumber
Kalau pakai numpy, yang paling bisa terpikir oleh saya adalah pakai masker
Hal serupa dapat dicapai dengan menggunakan
itertools
tanpanumpy
sumber
np.arange(len(arr)) != 3
sebagai topeng, karena itu bisa disisipkan, misalnyaarr[~(np.arange(len(arr)) == 3)]
atau apapun.Gunakan
np.delete
! Itu tidak benar-benar menghapus apa pun di tempatContoh:
sumber
Saya akan memberikan cara yang fungsional (tidak dapat diubah) untuk melakukannya.
Cara standar dan mudah untuk melakukannya adalah dengan mengiris:
Keluaran:
Gunakan pemahaman daftar:
Keluaran:
Gunakan fungsi filter:
Keluaran:
Menggunakan masking. Masking disediakan oleh fungsi itertools.compress di pustaka standar:
Keluaran:
Gunakan fungsi itertools.filterfalse dari pustaka standar Python
Keluaran:
sumber
Jika Anda tidak mengetahui indeks sebelumnya di sini adalah fungsi yang akan berfungsi
sumber
Perhatikan bahwa jika variabel adalah daftar daftar, beberapa pendekatan akan gagal. Sebagai contoh:
Untuk kasus umum, gunakan
sumber
Jika Anda ingin memotong yang terakhir atau yang pertama lakukan ini:
Jika Anda mengubah 1 menjadi 2, 2 karakter pertama akan dihapus, bukan yang kedua. Semoga ini masih membantu!
sumber