Saya ingin menulis sesuatu yang menghapus elemen tertentu dari array. Saya tahu bahwa saya harus for
mengulang melalui array untuk menemukan elemen yang cocok dengan konten.
Katakanlah saya memiliki sebuah array email dan saya ingin menyingkirkan elemen yang cocok dengan beberapa string email.
Saya sebenarnya ingin menggunakan struktur loop for karena saya perlu menggunakan indeks yang sama untuk array lain juga.
Berikut kode yang saya miliki:
for index, item in emails:
if emails[index] == '[email protected]':
emails.pop(index)
otherarray.pop(index)
list.remove(x)
?Jawaban:
Anda tidak perlu mengulang array. Hanya:
>>> x = ['[email protected]', '[email protected]'] >>> x ['[email protected]', '[email protected]'] >>> x.remove('[email protected]') >>> x ['[email protected]']
Ini akan menghapus kemunculan pertama yang cocok dengan string.
EDIT: Setelah Anda mengedit, Anda masih tidak perlu mengulang. Lakukan saja:
index = initial_list.index(item1) del initial_list[index] del other_list[index]
sumber
Menggunakan
filter()
danlambda
akan memberikan metode yang rapi dan singkat untuk menghilangkan nilai yang tidak diinginkan:newEmails = list(filter(lambda x : x != '[email protected]', emails))
Ini tidak mengubah email. Ini membuat daftar newEmails baru yang hanya berisi elemen yang fungsi anonimnya mengembalikan True.
sumber
Perulangan for Anda salah, jika Anda membutuhkan indeks dalam perulangan for:
for index, item in enumerate(emails): # whatever (but you can't remove element while iterating)
Dalam kasus Anda, solusi Bogdan baik-baik saja, tetapi pilihan struktur data Anda tidak begitu baik. Harus mempertahankan kedua daftar ini dengan data dari satu yang terkait dengan data dari yang lain pada indeks yang sama adalah hal yang janggal.
Daftar tupple (email, data lain) mungkin lebih baik, atau dikt dengan email sebagai kuncinya.
sumber
Cara yang masuk akal untuk melakukan ini adalah dengan menggunakan
zip()
dan Pemahaman Daftar / Ekspresi Generator:filtered = ( (email, other) for email, other in zip(emails, other_list) if email == '[email protected]') new_emails, new_other_list = zip(*filtered)
Juga, jika Anda tidak menggunakan
array.array()
ataunumpy.array()
, kemungkinan besar Anda menggunakan[]
ataulist()
, yang memberi Anda Daftar, bukan Array. Bukan hal yang sama.sumber
Ada solusi alternatif untuk masalah ini yang juga berhubungan dengan kecocokan duplikat.
Kami mulai dengan 2 daftar dengan panjang yang sama:
emails
,otherarray
. Tujuannya adalah untuk menghapus item dari kedua daftar untuk setiap indeks dii
manaemails[i] == '[email protected]'
.Ini dapat dicapai dengan menggunakan pemahaman daftar dan kemudian membagi melalui
zip
:emails = ['[email protected]', '[email protected]', '[email protected]'] otherarray = ['some', 'other', 'details'] from operator import itemgetter res = [(i, j) for i, j in zip(emails, otherarray) if i!= '[email protected]'] emails, otherarray = map(list, map(itemgetter(0, 1), zip(*res))) print(emails) # ['[email protected]', '[email protected]'] print(otherarray) # ['some', 'details']
sumber
Jika Anda ingin menghapus indeks array:
Gunakan array_name.pop (index_no.)
ex:-
>>> arr = [1,2,3,4] >>> arr.pop(2) >>>arr [1,2,4]
Jika Anda ingin menghapus string / elemen tertentu dari array maka
>>> arr1 = ['python3.6' , 'python2' ,'python3'] >>> arr1.remove('python2') >>> arr1 ['python3.6','python3']
sumber