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))
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))
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!