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

Mengapa Mengubah Suai Senarai Semasa Lelaran dalam Python Bermasalah?

DDD
Lepaskan: 2024-10-21 09:05:30
asal
972 orang telah melayarinya

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

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

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!

sumber:php
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan