Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Mengubah Suai Senarai Semasa Lelaran Menghasilkan Keputusan Yang Tidak Dijangka?

Mengapa Mengubah Suai Senarai Semasa Lelaran Menghasilkan Keputusan Yang Tidak Dijangka?

Susan Sarandon
Lepaskan: 2024-12-23 19:53:17
asal
744 orang telah melayarinya

Why Does Modifying a List During Iteration Produce Unexpected Results?

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)
Salin selepas log masuk

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]
Salin selepas log masuk

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)
Salin selepas log masuk

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]
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan