Lelaran Atas Senarai: Memahami Gelagat Python
Dalam Python, apabila melelaran senarai dan mengubah suai kandungannya secara serentak, tingkah laku yang tidak dijangka boleh berlaku. Pertimbangkan contoh ringkas ini:
<code class="python">x = [1,2,2,2,2] for i in x: x.remove(i) print(x) </code>
Niatnya adalah untuk mengalih keluar semua elemen daripada senarai. Walau bagaimanapun, selepas pelaksanaan, dua elemen kekal. Mengapakah ini berlaku?
Perangkap Pengubahsuaian Semasa Lelaran
Python menetapkan bahawa mengubah suai senarai semasa mengulanginya tidak disyorkan. Apabila elemen dialih keluar daripada senarai, kedudukan iterator beralih ke elemen seterusnya. Dalam contoh, elemen pertama dialih keluar, mengalihkan kedudukan ke elemen kedua. Walau bagaimanapun, memandangkan elemen kedua masih "2", ia akan dilangkau semasa lelaran. Ponteng ini berterusan, meninggalkan dua elemen "2" yang tinggal.
Menyelesaikan Isu
Untuk menangani perkara ini, Python menyediakan teknik untuk menyalin senarai dengan berkesan sebelum lelaran:
<code class="python">for i in x[:]: x.remove(i)</code>
Dalam kes ini, operator slice [:] mencipta salinan senarai asal. Ini memastikan bahawa lelaran berjalan seperti yang diharapkan, dan semua elemen dialih keluar daripada senarai asal. Ingat, tingkah laku ini digunakan untuk mengubah suai senarai semasa lelaran, bukan untuk menambah atau menggantikan elemen.
Atas ialah kandungan terperinci Mengapa Mengubah Suai Senarai Semasa Lelaran dalam Python Bermasalah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!