Ya, removemenghilangkan pertama pencocokan nilai , bukan indeks tertentu:
>>> a =[0,2,3,2]>>> a.remove(2)>>> a[0,3,2]
del menghapus item pada indeks tertentu:
>>> a =[9,8,7,6]>>>del a[1]>>> a[9,7,6]
dan popmenghapus item pada indeks tertentu dan mengembalikannya.
>>> a =[4,3,5]>>> a.pop(1)3>>> a[4,5]
Mode kesalahan mereka juga berbeda:
>>> a =[4,5,6]>>> a.remove(7)Traceback(most recent call last):File"<stdin>", line 1,in<module>ValueError: list.remove(x): x notin list>>>del a[7]Traceback(most recent call last):File"<stdin>", line 1,in<module>IndexError: list assignment index out of range>>> a.pop(7)Traceback(most recent call last):File"<stdin>", line 1,in<module>IndexError: pop index out of range
@ jxramos: delbukan penahan sintaks, tidak. Sintaksnya tidak berubah, seperti returnatau ifatau while.
Martijn Pieters
6
Perlu disebutkan bahwa pengguna harus berhati-hati ketika melakukan iterasi pada daftar dan menggunakan fungsi-fungsi ini di atasnya pada saat yang sama seperti iterasi.
hamaney
16
The delcontoh agak menyesatkan. Elemen mana yang dihapus, tepatnya? Yang ke-2 atau ke-3? Anda seharusnya menggunakan [9, 8, 7, 6], del a[1]dan[9, 7, 6]
gromit190
2
@ rite2hhh itu menguji kesetaraan. Tes kesetaraan menguji identitas terlebih dahulu sebagai pengoptimalan
Gunakan deluntuk menghapus elemen dengan indeks, pop()untuk menghapusnya dengan indeks jika Anda membutuhkan nilai yang dikembalikan, dan remove()untuk menghapus elemen dengan nilai. Yang terakhir membutuhkan pencarian daftar, dan naik ValueErrorjika tidak ada nilai seperti itu terjadi dalam daftar.
Saat menghapus indeks idari daftar nelemen, kompleksitas komputasi dari metode ini adalah
+1 untuk pemecahan kompleksitas. Mengilustrasikan bagaimana menghapus dan pop konstan ketika elemen berada di akhir daftar.
Big Sharpie
2
Ingat teman-teman ... indeks berdasarkan apa pun adalah satu tembakan O (n-1) ... jika Anda harus melakukan pencarian (berdasarkan nilai), itu akan melintasi koleksi sampai elemen ditemukan.
Pepito Fernandez
2
@PepitoFernandez Mencari berdasarkan indeks dalam daftar adalah O (1) dengan Python. (Daftar dengan Python mirip dengan vektor dalam C ++.)
Sven Marnach
3
@PlasmaBinturong Anda harus menggunakan apa yang menurut Anda lebih mudah dibaca, kecuali jika Anda memiliki data yang membuktikan bahwa kinerja itu penting. Dan jika sudah, Anda perlu mengukur apa yang lebih cepat dalam kasus spesifik Anda. Dugaan saya juga delsedikit lebih cepat, tetapi untuk alasan yang berbeda: pencarian untuk __delitem__tipe yang diimplementasikan dalam C terjadi dengan indeks daripada dengan nama, sedangkan popperlu dilihat setelah mengikuti seluruh protokol deskriptor. Eksekusi fungsi itu sendiri harus mengambil jumlah waktu yang sama. Keduanya mengembalikan pointer - satu ke objek yang dihapus, yang lainnya ke None.
Sven Marnach
92
Karena tidak ada orang lain yang menyebutkannya, perhatikan bahwa del(tidak seperti pop) memungkinkan penghapusan rentang indeks karena pengirisan daftar:
>>> lst =[3,2,2,1]>>>del lst[1:]>>> lst
[3]
Ini juga memungkinkan penghindaran IndexErrorjika indeks tidak ada dalam daftar:
Sudah dijawab cukup baik oleh orang lain. Yang ini dari akhir saya :)
Jelas, popadalah satu-satunya yang mengembalikan nilai, dan removesatu-satunya yang mencari objek, sementara delmembatasi dirinya pada penghapusan sederhana.
Setiap operasi / fungsi pada struktur data yang berbeda didefinisikan untuk tindakan tertentu. Di sini, dalam kasus Anda yaitu menghapus elemen, menghapus, Pop dan menghapus. (Jika Anda mempertimbangkan set, Tambahkan operasi lain - buang) Kasing membingungkan lainnya adalah saat menambahkan. Sisipkan / Tambah. Untuk Demonstrasi, Mari kita Implementasikan deque. deque adalah struktur data linier hybrid, di mana Anda dapat menambahkan elemen / menghapus elemen dari kedua ujungnya. (Belakang dan depan Berakhir)
Sementara pop dan hapus keduanya ambil indeks untuk menghapus elemen seperti yang dinyatakan dalam komentar di atas. Perbedaan utama adalah kompleksitas waktu untuk mereka. Kompleksitas waktu untuk pop () tanpa indeks adalah O (1) tetapi bukan kasus yang sama untuk penghapusan elemen terakhir.
Ini salah dalam banyak hal. Tidak ada metode seperti itu delete. Perbedaannya adalah yang popmengembalikan nilai, dan yang delbekerja pada irisan. Dalam kasus di mana popkarya, delmemiliki kompleksitas komputasi yang persis sama (dan sedikit lebih cepat dengan istilah yang konstan).
abarnert
1
The menghapus operasi pada daftar diberi nilai untuk menghapus. Itu mencari daftar untuk menemukan item dengan nilai itu dan menghapus item yang cocok pertama kali ditemukan. Ini adalah kesalahan jika tidak ada item yang cocok, menimbulkan ValueError .
>>> x =[1,0,0,0,3,4,5]>>> x.remove(4)>>> x
[1,0,0,0,3,5]>>>del x[7]Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>del x[7]IndexError: list assignment index out of range
The del Pernyataan dapat digunakan untuk menghapus seluruh daftar. Jika Anda memiliki item daftar tertentu sebagai argumen untuk dihapus (mis. Listname [7] untuk merujuk item ke-8 dalam daftar), itu hanya akan menghapus item itu. Bahkan dimungkinkan untuk menghapus "slice" dari daftar. Ini adalah kesalahan jika ada indeks di luar jangkauan, menimbulkan IndexError .
>>> x =[1,2,3,4]>>>del x[3]>>> x
[1,2,3]>>>del x[4]Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>del x[4]IndexError: list assignment index out of range
Penggunaan pop yang biasa adalah untuk menghapus item terakhir dari daftar saat Anda menggunakan daftar sebagai tumpukan. Tidak seperti del, pop mengembalikan nilai yang muncul dari daftar. Anda secara opsional dapat memberikan nilai indeks ke pop dan pop dari selain akhir daftar (mis. Listname.pop (0) akan menghapus item pertama dari daftar dan mengembalikan item pertama sebagai hasilnya). Anda dapat menggunakan ini untuk membuat daftar berperilaku seperti antrian, tetapi ada rutinitas perpustakaan yang tersedia yang dapat memberikan operasi antrian dengan kinerja yang lebih baik daripada pop (0). Ini adalah kesalahan jika ada indeks di luar jangkauan, menimbulkan IndexError .
>>> x =[1,2,3]>>> x.pop(2)3>>> x
[1,2]>>> x.pop(4)Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>
x.pop(4)IndexError: pop index out of range
Hapus pada dasarnya bekerja pada nilai. Hapus dan pop pekerjaan pada indeks
Hapus pada dasarnya menghapus nilai pencocokan pertama. Hapus menghapus item dari indeks tertentu. Pop pada dasarnya mengambil indeks dan mengembalikan nilai pada indeks itu. Lain kali Anda mencetak daftar, nilainya tidak muncul.
Meskipun kami berterima kasih atas jawaban Anda, akan lebih baik jika memberikan nilai tambahan di atas jawaban lainnya. Dalam hal ini, jawaban Anda tidak memberikan nilai tambahan, karena pengguna lain membahas semua yang telah Anda sertakan dalam jawaban Anda. Sebagai masalah kedua, harap jangan sertakan teks sebagai gambar saat Anda dapat menempelkannya sebagai teks. Jika jawaban sebelumnya bermanfaat bagi Anda, Anda harus memilihnya .
David Buck
-3
Anda juga dapat menggunakan hapus untuk menghapus nilai berdasarkan indeks juga.
@abarnert use case Anda bekerja selaras dengan case di bawah ini n = [5,3,5], lalu n.remove (5). Keduanya menghapus elemen yang ditemui pertama dari daftar.
Akhil Ghatiki
@AkhilGhatiki n.remove(n[2])Menghapus n[0], tidak n[2]. Jadi bukan hanya waktu linier tanpa alasan (mungkin bukan masalah besar ketika N = 3), itu juga salah (masalah besar apa pun N)
Jawaban:
Ya,
remove
menghilangkan pertama pencocokan nilai , bukan indeks tertentu:del
menghapus item pada indeks tertentu:dan
pop
menghapus item pada indeks tertentu dan mengembalikannya.Mode kesalahan mereka juga berbeda:
sumber
del
bukan penahan sintaks, tidak. Sintaksnya tidak berubah, sepertireturn
atauif
atauwhile
.del
contoh agak menyesatkan. Elemen mana yang dihapus, tepatnya? Yang ke-2 atau ke-3? Anda seharusnya menggunakan[9, 8, 7, 6]
,del a[1]
dan[9, 7, 6]
Gunakan
del
untuk menghapus elemen dengan indeks,pop()
untuk menghapusnya dengan indeks jika Anda membutuhkan nilai yang dikembalikan, danremove()
untuk menghapus elemen dengan nilai. Yang terakhir membutuhkan pencarian daftar, dan naikValueError
jika tidak ada nilai seperti itu terjadi dalam daftar.Saat menghapus indeks
i
dari daftarn
elemen, kompleksitas komputasi dari metode ini adalahsumber
del
sedikit lebih cepat, tetapi untuk alasan yang berbeda: pencarian untuk__delitem__
tipe yang diimplementasikan dalam C terjadi dengan indeks daripada dengan nama, sedangkanpop
perlu dilihat setelah mengikuti seluruh protokol deskriptor. Eksekusi fungsi itu sendiri harus mengambil jumlah waktu yang sama. Keduanya mengembalikan pointer - satu ke objek yang dihapus, yang lainnya keNone
.Karena tidak ada orang lain yang menyebutkannya, perhatikan bahwa
del
(tidak sepertipop
) memungkinkan penghapusan rentang indeks karena pengirisan daftar:Ini juga memungkinkan penghindaran
IndexError
jika indeks tidak ada dalam daftar:sumber
Sudah dijawab cukup baik oleh orang lain. Yang ini dari akhir saya :)
Jelas,
pop
adalah satu-satunya yang mengembalikan nilai, danremove
satu-satunya yang mencari objek, sementaradel
membatasi dirinya pada penghapusan sederhana.sumber
pop - Mengambil Indeks dan mengembalikan Nilai
remove - Mengambil nilai, menghapus kejadian pertama, dan tidak mengembalikan apa pun
delete - Mengambil indeks, menghapus nilai pada indeks itu, dan tidak mengembalikan apa pun
sumber
Banyak penjelasan terbaik ada di sini tetapi saya akan mencoba yang terbaik untuk menyederhanakan lebih banyak.
Di antara semua metode ini, reverse & pop adalah postfix sementara delete adalah prefix .
remove (): Digunakan untuk menghapus elemen yang pertama kali muncul
remove(i)
=> kemunculan pertama dari nilai ipop (): Digunakan untuk menghapus elemen jika:
tidak ditentukan
pop()
=> dari akhir daftarditentukan
pop(index)
=> dari indeksPERINGATAN: Metode Berbahaya Di Depan
delete () : Ini metode awalan.
Perhatikan dua sintaks yang berbeda untuk metode yang sama: [] dan (). Ia memiliki kekuatan untuk:
1. Hapus indeks
del a[index]
=> digunakan untuk menghapus indeks dan nilai terkait seperti pop.2.Hapus nilai dalam kisaran [indeks 1: indeks N]
del a[0:3]
=> beberapa nilai dalam rentang3.Terakhir tetapi tidak daftar, untuk menghapus seluruh daftar dalam satu kesempatan
del (a)
=> seperti yang dikatakan di atas.Semoga ini menjelaskan kebingungan jika ada.
sumber
Setiap operasi / fungsi pada struktur data yang berbeda didefinisikan untuk tindakan tertentu. Di sini, dalam kasus Anda yaitu menghapus elemen, menghapus, Pop dan menghapus. (Jika Anda mempertimbangkan set, Tambahkan operasi lain - buang) Kasing membingungkan lainnya adalah saat menambahkan. Sisipkan / Tambah. Untuk Demonstrasi, Mari kita Implementasikan deque. deque adalah struktur data linier hybrid, di mana Anda dapat menambahkan elemen / menghapus elemen dari kedua ujungnya. (Belakang dan depan Berakhir)
Di sini, lihat operasinya:
Operasi harus mengembalikan sesuatu. Jadi, pop - Dengan dan tanpa indeks. Jika saya tidak ingin mengembalikan nilainya: del self.items [0]
Hapus dengan nilai bukan Indeks:
hapus:
Pengembalian [1,3,5,7]
mari kita perhatikan kasus set.
sumber
Sementara pop dan hapus keduanya ambil indeks untuk menghapus elemen seperti yang dinyatakan dalam komentar di atas. Perbedaan utama adalah kompleksitas waktu untuk mereka. Kompleksitas waktu untuk pop () tanpa indeks adalah O (1) tetapi bukan kasus yang sama untuk penghapusan elemen terakhir.
Jika use case Anda selalu untuk menghapus elemen terakhir, selalu lebih baik menggunakan pop () daripada delete (). Untuk penjelasan lebih lanjut tentang kompleksitas waktu, Anda dapat merujuk ke https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt
sumber
delete
. Perbedaannya adalah yangpop
mengembalikan nilai, dan yangdel
bekerja pada irisan. Dalam kasus di manapop
karya,del
memiliki kompleksitas komputasi yang persis sama (dan sedikit lebih cepat dengan istilah yang konstan).The menghapus operasi pada daftar diberi nilai untuk menghapus. Itu mencari daftar untuk menemukan item dengan nilai itu dan menghapus item yang cocok pertama kali ditemukan. Ini adalah kesalahan jika tidak ada item yang cocok, menimbulkan ValueError .
The del Pernyataan dapat digunakan untuk menghapus seluruh daftar. Jika Anda memiliki item daftar tertentu sebagai argumen untuk dihapus (mis. Listname [7] untuk merujuk item ke-8 dalam daftar), itu hanya akan menghapus item itu. Bahkan dimungkinkan untuk menghapus "slice" dari daftar. Ini adalah kesalahan jika ada indeks di luar jangkauan, menimbulkan IndexError .
Penggunaan pop yang biasa adalah untuk menghapus item terakhir dari daftar saat Anda menggunakan daftar sebagai tumpukan. Tidak seperti del, pop mengembalikan nilai yang muncul dari daftar. Anda secara opsional dapat memberikan nilai indeks ke pop dan pop dari selain akhir daftar (mis. Listname.pop (0) akan menghapus item pertama dari daftar dan mengembalikan item pertama sebagai hasilnya). Anda dapat menggunakan ini untuk membuat daftar berperilaku seperti antrian, tetapi ada rutinitas perpustakaan yang tersedia yang dapat memberikan operasi antrian dengan kinerja yang lebih baik daripada pop (0). Ini adalah kesalahan jika ada indeks di luar jangkauan, menimbulkan IndexError .
Lihat collections.deque untuk lebih jelasnya.
sumber
Hapus pada dasarnya bekerja pada nilai. Hapus dan pop pekerjaan pada indeks
Hapus pada dasarnya menghapus nilai pencocokan pertama. Hapus menghapus item dari indeks tertentu. Pop pada dasarnya mengambil indeks dan mengembalikan nilai pada indeks itu. Lain kali Anda mencetak daftar, nilainya tidak muncul.
sumber
Anda juga dapat menggunakan hapus untuk menghapus nilai berdasarkan indeks juga.
n kemudian merujuk ke [1, 5]
sumber
n = [5, 3, 5]
begitun.remove(n[2])
.n.remove(n[2])
Menghapusn[0]
, tidakn[2]
. Jadi bukan hanya waktu linier tanpa alasan (mungkin bukan masalah besar ketika N = 3), itu juga salah (masalah besar apa pun N)