Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Mengubah Suai Senarai Semasa Lelaran dalam Python Membawa kepada Tingkah Laku yang Tidak Dijangka?

Mengapa Mengubah Suai Senarai Semasa Lelaran dalam Python Membawa kepada Tingkah Laku yang Tidak Dijangka?

DDD
Lepaskan: 2024-12-12 22:17:13
asal
148 orang telah melayarinya

Why Does Modifying a List During Iteration in Python Lead to Unexpected Behavior?

Kesan Mengubah Suai Senarai Semasa Lelaran

Apabila bekerja dengan senarai dalam Python, adalah penting untuk berhati-hati untuk mengubah suainya semasa lelaran. Percubaan untuk memanipulasi senarai asal semasa merentasinya boleh membawa kepada hasil yang tidak dapat diramalkan.

Pertimbangkan contoh kod berikut:

l = range(100)
for i in l:
    print(i)
    print(l.pop(0))
    print(l.pop(0))
Salin selepas log masuk

Anda mungkin menjangkakan kod ini mencetak setiap elemen dalam senarai dan kemudian keluarkan dua elemen pertama, ulangi proses ini untuk elemen yang tinggal. Walau bagaimanapun, output sebenar akan menyimpang daripada jangkaan ini.

Punca anomali ini terletak pada pengubahsuaian senarai semasa lelaran. Mengalih keluar elemen daripada senarai menggunakan l.pop(0) mengubah saiz dan susunannya. Akibatnya, iterator i menjadi ketinggalan zaman, menyebabkan gelung berkelakuan tidak menentu.

Mengelakkan Pengubahsuaian Senarai Semasa Lelaran

Untuk mengelakkan isu sedemikian, adalah dinasihatkan untuk membuat salinan senarai dan ulangi salinan itu. Ini memastikan bahawa senarai asal kekal tidak diubah suai dan iterator menyediakan akses tepat kepada elemen sepanjang gelung.

Sebagai contoh, kod berikut menunjukkan pendekatan ini:

l_copy = list(l)  # Create a copy of l
for i in l_copy:
    print(i)
    print(l.pop(0))
    print(l.pop(0))
Salin selepas log masuk

Sekarang, output sejajar dengan tingkah laku yang dijangkakan, kerana senarai asal l mengekalkan integritinya, manakala salinan diubahsuai l_copy digunakan untuk lelaran.

Sebagai alternatif, seperti yang dicadangkan dalam jawapan yang disediakan, anda boleh menggunakan gelung sementara dengan indeks untuk mengawal lelaran dan membuat pengubahsuaian yang diperlukan pada senarai asal dalam gelung.

Atas ialah kandungan terperinci Mengapa Mengubah Suai Senarai Semasa Lelaran dalam Python Membawa kepada Tingkah Laku 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan