Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Mengubah Suai Senarai Semasa Lelaran dalam Python Bermasalah?

Mengapa Mengubah Suai Senarai Semasa Lelaran dalam Python Bermasalah?

DDD
DDDasal
2024-10-21 09:05:30852semak imbas

Why is Modifying a List During Iteration in Python Problematic?

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!

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