a = [1, 2, 3, 4]
b = a.index(6)
del a[b]
print(a)
Di atas menunjukkan kesalahan berikut:
Traceback (most recent call last):
File "D:\zjm_code\a.py", line 6, in <module>
b = a.index(6)
ValueError: list.index(x): x not in list
Jadi saya harus melakukan ini:
a = [1, 2, 3, 4]
try:
b = a.index(6)
del a[b]
except:
pass
print(a)
Tetapi apakah tidak ada cara yang lebih sederhana untuk melakukan ini?
except
adalah praktik yang buruk . Gunakanexcept Exception
minimal.Jawaban:
Untuk menghapus kejadian pertama suatu elemen dalam daftar, cukup gunakan
list.remove
:Pikiran bahwa itu tidak menghapus semua kemunculan elemen Anda. Gunakan pemahaman daftar untuk itu.
sumber
remove
O (n)?Biasanya Python akan mengeluarkan Exception jika Anda menyuruhnya melakukan sesuatu yang tidak bisa, jadi Anda harus melakukannya:
atau:
Pengecualian tidak selalu merupakan hal yang buruk asalkan itu yang Anda harapkan dan tangani dengan benar.
sumber
a.remove(c)
mungkin akan gagal meskipunif c in a
cek (a
dapat dimodifikasi di utas lain setelahc in a
cek tetapi sebeluma.remove(c)
panggilan)try/except
atau kunci dapat digunakan untuk menghindari kondisi balapan.Anda dapat melakukan
tetapi di atas perlu mencari 6 dalam daftar 2 kali, jadi coba kecuali akan lebih cepat
sumber
Mempertimbangkan:
Untuk menghapus semua kejadian, Anda bisa menggunakan fungsi filter dengan python. Sebagai contoh, akan terlihat seperti:
Jadi, itu akan menjaga semua elemen
a != 2
.Untuk hanya mengambil salah satu item yang digunakan
sumber
filter()
lainlist()
? Menurut manual, itu sudah mengembalikan daftar.Berikut cara melakukannya di tempat (tanpa pemahaman daftar):
sumber
O(n*n)
tidak perlu (bandingkan 1e6 dan 1e12 - Anda tidak ingin mengambil risiko yang terakhir).while 1: L.remove(value)
dan kembaliValueError
mungkin bekerja dengan baik dengan beberapavalue
s atau daftar kecil di CPython.Jika Anda tahu nilai apa yang harus dihapus, berikut ini cara sederhana (sesederhana yang dapat saya pikirkan):
Anda akan mendapatkannya
[0, 0, 2, 3, 4]
sumber
while 1 in a:
sebagai struktur loop?O(n^2)
sinilah pemahaman akan terjadiO(n)
.Kemungkinan lain adalah menggunakan set daripada daftar, jika satu set berlaku di aplikasi Anda.
Yaitu jika data Anda tidak diurutkan, dan tidak memiliki duplikat, maka
bebas dari kesalahan.
Seringkali daftar hanyalah wadah berguna untuk item yang sebenarnya tidak terurut. Ada pertanyaan yang menanyakan cara menghapus semua kemunculan elemen dari daftar. Jika Anda tidak ingin dupes di tempat pertama, sekali lagi satu set berguna.
tidak mengubah my_set dari atas.
sumber
Seperti yang dinyatakan oleh banyak jawaban lain,
list.remove()
akan berhasil, tetapi melemparValueError
jika item tidak ada dalam daftar. Dengan python 3.4+, ada pendekatan yang menarik untuk menangani ini, menggunakan suppress contextmanager :sumber
Menemukan nilai dalam daftar lalu menghapus indeks itu (jika ada) lebih mudah dilakukan dengan hanya menggunakan metode hapus daftar:
Jika Anda sering melakukannya, Anda dapat membungkusnya dalam suatu fungsi:
sumber
Contoh ini cepat dan akan menghapus semua instance nilai dari daftar:
sumber
break
padaexcept ValueError
.Dalam satu baris:
terkadang bermanfaat.
Lebih mudah lagi:
sumber
Jika elemen Anda berbeda, maka perbedaan set sederhana akan dilakukan.
sumber
Kita juga bisa menggunakan .pop:
sumber
Timpa daftar dengan mengindeks semuanya kecuali elemen yang ingin Anda hapus
sumber
Dengan for for dan kondisi:
Dan jika Anda ingin menghapus beberapa, tetapi tidak semua:
sumber
sumber
Katakan misalnya, kami ingin menghapus semua 1 dari x. Ini adalah bagaimana saya akan melakukannya:
Sekarang, ini adalah penggunaan praktis dari metode saya:
Dan ini adalah metode saya dalam satu baris:
Keduanya menghasilkan ini sebagai output:
Semoga ini membantu. PS, mohon perhatikan bahwa ini ditulis dalam versi 3.6.2, jadi Anda mungkin perlu menyesuaikannya untuk versi yang lebih lama.
sumber
Mungkin solusi Anda bekerja dengan ints, tetapi itu tidak berfungsi untuk saya dengan kamus.
Di satu sisi, hapus () tidak berfungsi untuk saya. Tapi mungkin itu bekerja dengan Tipe dasar. Saya kira kode di bawah ini juga cara untuk menghapus item dari daftar objek.
Di sisi lain, 'del' juga tidak berfungsi dengan baik. Dalam kasus saya, menggunakan python 3.6: ketika saya mencoba untuk menghapus elemen dari daftar di 'for' bucle dengan perintah 'del', python mengubah indeks dalam proses dan bucle berhenti sebelum waktunya sebelum waktu. Ini hanya berfungsi jika Anda menghapus elemen demi elemen secara terbalik urutan . Dengan cara ini Anda tidak mengubah indeks array elemen yang menunggu saat Anda akan melewatinya
Kemudian, saya menggunakan:
di mana 'daftar' seperti [{'key1': value1 '}, {' key2 ': value2}, {' key3 ': value3}, ...]
Anda juga dapat melakukan lebih banyak pythonic menggunakan enumerate:
sumber
sumber
Ini menghapus semua instance dari
"-v"
arraysys.argv
, dan tidak mengeluh jika tidak ada instance ditemukan:Anda dapat melihat kode dalam aksi, dalam file bernama
speechToText.py
:sumber
ini jawaban saya, gunakan saja sementara dan untuk
sumber