Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Pengubahsuaian Senarai Menyebabkan Elemen Dilangkau Semasa Lelaran dalam Python?

Mengapakah Pengubahsuaian Senarai Menyebabkan Elemen Dilangkau Semasa Lelaran dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-10-21 09:03:29630semak imbas

Why Do List Modifications Cause Skipped Elements During Iteration in Python?

Anomali Lelaran Python: Melangkau Elemen Semasa Pengubahsuaian Senarai

Apabila melintasi senarai menggunakan gelung dalam Python, adalah penting untuk mengetahui potensi anomali yang boleh timbul daripada mengubah suai senarai semasa lelaran. Satu anomali sedemikian berlaku apabila elemen dialih keluar daripada senarai dalam gelung.

Pertimbangkan contoh berikut:

<code class="python">x = [1, 2, 2, 2, 2]

for i in x:
    x.remove(i)

print(x)  # Expected: [] but instead results in [2, 2]</code>

Memang mengelirukan, selepas melaksanakan gelung ini, senarai x masih mengandungi dua elemen ( [2, 2]) bukannya kosong seperti yang dimaksudkan. Tingkah laku ini berpunca daripada cara Python mengendalikan lelaran senarai.

Mekanisme Lelaran

Apabila gelung for berulang pada senarai, ia mengekalkan penuding dalaman yang menghala ke elemen semasa sedang diperiksa. Walau bagaimanapun, apabila elemen dialih keluar daripada senarai, penunjuk tidak dikemas kini secara automatik untuk merujuk elemen seterusnya. Akibatnya, gelung melangkau elemen yang mengikuti elemen yang dialih keluar.

Mengelakkan Elemen yang Dilangkau

Untuk mengelakkan unsur yang dilangkau, pengubahsuaian senarai boleh dilakukan menggunakan salinan senarai asal. Kod yang diubah suai berikut menggunakan penghirisan untuk mencipta salinan senarai dan lelaran ke atasnya:

<code class="python">for i in x[:]:
    x.remove(i)</code>

Operasi menghiris x[:] mencipta senarai baharu yang mengandungi semua elemen x. Salinan ini digunakan untuk lelaran, memastikan penunjuk dalaman mengemas kini dengan betul kepada elemen seterusnya selepas dialih keluar. Akibatnya, gelung berjaya mengalih keluar semua elemen daripada senarai.

Atas ialah kandungan terperinci Mengapakah Pengubahsuaian Senarai Menyebabkan Elemen Dilangkau Semasa Lelaran dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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