Hasil Yang Tidak Dijangka Semasa Mengubah Suai Senarai Semasa Lelaran
Apabila mengubah suai senarai sambil mengulanginya, hasil yang tidak dijangka boleh berlaku. Pertimbangkan kod berikut:
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
Walaupun ada niat untuk mengalih keluar nombor kurang daripada 20 daripada senarai, output yang terhasil termasuk beberapa nombor ini. Percanggahan ini timbul kerana senarai sedang diubah semasa lelaran.
Khususnya, selepas mengalih keluar nombor pertama di bawah 20 (1), gelung meneruskan ke item seterusnya dalam senarai asal, yang kini 3 bukannya 2 . Proses ini berterusan, menyebabkan semua nombor ganjil di bawah 20 dialih keluar.
Untuk mengelakkan isu ini, disyorkan untuk menggunakan pendekatan alternatif, seperti pemahaman senarai atau ungkapan penjana. Berikut ialah contoh menggunakan pemahaman senarai:
numbers = [n for n in numbers if n >= 20]
Kod ini mengekalkan susunan asal senarai sambil menapis elemen yang tidak diingini. Sebagai alternatif, anda boleh menggunakan pengubahan di tempat dengan ungkapan penjana:
numbers[:] = (n for n in numbers if n >= 20)
Jika anda perlu melakukan operasi pada elemen sebelum mengalih keluarnya, pertimbangkan untuk menggunakan gelung diindeks dan tetapkan elemen kepada Tiada. Kemudian, buat senarai baharu yang mengandungi hanya elemen bukan Tiada:
for i, n in enumerate(numbers): if n < 20: print("do something") numbers[i] = None numbers = [n for n in numbers if n is not None]
Atas ialah kandungan terperinci Mengapa Mengubah Suai Senarai Semasa Lelaran Menghasilkan Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!