>>> a=[1,2,3]
>>> a.remove(2)
>>> a
[1, 3]
>>> a=[1,2,3]
>>> del a[1]
>>> a
[1, 3]
>>> a= [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]
>>>
Apakah ada perbedaan antara ketiga metode di atas untuk menghapus elemen dari daftar?
>>> a=[1,2,3]
>>> a.remove(2)
>>> a
[1, 3]
>>> a=[1,2,3]
>>> del a[1]
>>> a
[1, 3]
>>> a= [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]
>>>
Apakah ada perbedaan antara ketiga metode di atas untuk menghapus elemen dari daftar?
Jawaban:
Ya, remove
menghilangkan 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 pop
menghapus 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 not in 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
del
bukan penahan sintaks, tidak. Sintaksnya tidak berubah, seperti return
atau if
atau while
.
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, dan remove()
untuk menghapus elemen dengan nilai. Yang terakhir membutuhkan pencarian daftar, dan naik ValueError
jika tidak ada nilai seperti itu terjadi dalam daftar.
Saat menghapus indeks i
dari daftar n
elemen, kompleksitas komputasi dari metode ini adalah
del O(n - i)
pop O(n - i)
remove O(n)
del
sedikit lebih cepat, tetapi untuk alasan yang berbeda: pencarian untuk __delitem__
tipe yang diimplementasikan dalam C terjadi dengan indeks daripada dengan nama, sedangkan pop
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 ke None
.
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 IndexError
jika indeks tidak ada dalam daftar:
>>> lst = [3, 2, 2, 1]
>>> del lst[10:]
>>> lst
[3, 2, 2, 1]
Sudah dijawab cukup baik oleh orang lain. Yang ini dari akhir saya :)
Jelas, pop
adalah satu-satunya yang mengembalikan nilai, dan remove
satu-satunya yang mencari objek, sementara del
membatasi dirinya pada penghapusan sederhana.
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
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 i
>>> a = [0, 2, 3, 2, 1, 4, 6, 5, 7]
>>> a.remove(2) # where i = 2
>>> a
[0, 3, 2, 1, 4, 6, 5, 7]
pop (): Digunakan untuk menghapus elemen jika:
tidak ditentukan
pop()
=> dari akhir daftar
>>>a.pop()
>>>a
[0, 3, 2, 1, 4, 6, 5]
ditentukan
pop(index)
=> dari indeks
>>>a.pop(2)
>>>a
[0, 3, 1, 4, 6, 5]
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.
>>>del a[1]
>>>a
[0, 1, 4, 6, 5]
2.Hapus nilai dalam kisaran [indeks 1: indeks N]
del a[0:3]
=> beberapa nilai dalam rentang
>>>del a[0:3]
>>>a
[6, 5]
3.Terakhir tetapi tidak daftar, untuk menghapus seluruh daftar dalam satu kesempatan
del (a)
=> seperti yang dikatakan di atas.
>>>del (a)
>>>a
Semoga ini menjelaskan kebingungan jika ada.
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)
class Deque(object):
def __init__(self):
self.items=[]
def addFront(self,item):
return self.items.insert(0,item)
def addRear(self,item):
return self.items.append(item)
def deleteFront(self):
return self.items.pop(0)
def deleteRear(self):
return self.items.pop()
def returnAll(self):
return self.items[:]
Di sini, lihat operasinya:
def deleteFront(self):
return self.items.pop(0)
def deleteRear(self):
return self.items.pop()
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:
list_ez=[1,2,3,4,5,6,7,8]
for i in list_ez:
if i%2==0:
list_ez.remove(i)
print list_ez
mari kita perhatikan kasus set.
set_ez=set_ez=set(range(10))
set_ez.remove(11)
# Gives Key Value Error.
##KeyError: 11
set_ez.discard(11)
# Does Not return any errors.
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
delete
. Perbedaannya adalah yang pop
mengembalikan nilai, dan yang del
bekerja pada irisan. Dalam kasus di mana pop
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 .
>>> 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
Lihat collections.deque untuk lebih jelasnya.
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.
Anda juga dapat menggunakan hapus untuk menghapus nilai berdasarkan indeks juga.
n = [1, 3, 5]
n.remove(n[1])
n kemudian merujuk ke [1, 5]
n = [5, 3, 5]
begitu n.remove(n[2])
.
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)