Memahami Bahaya Mengubah Suai Senarai Semasa Lelaran
Merentasi senarai sambil membuat pengubahsuaian padanya mungkin membawa kepada tingkah laku yang tidak dijangka disebabkan oleh ketidakkonsistenan antara keadaan senarai dan pemahaman iterator tentangnya. Untuk menggambarkan perkara ini, pertimbangkan kod Python berikut:
l = range(100) for i in l: print(i) print(l.pop(0)) print(l.pop(0))
Daripada output jangkaan nombor berjujukan, kod ini menghasilkan hasil yang pelik. Alasannya terletak pada fakta bahawa sementara iterator berulang melalui senarai l, senarai itu sendiri sedang diubah suai. Secara khususnya, kaedah pop(0) mengalih keluar elemen dari permulaan l.
Untuk mengelakkan ketidakkonsistenan tersebut, adalah penting untuk mengelakkan pengubahsuaian bekas yang diulang. Satu penyelesaian yang biasa ialah membuat salinan bekas dan lelaran melalui salinan. Walau bagaimanapun, dalam kes seperti ini, di mana matlamatnya adalah untuk mengubah suai bekas asal, pendekatan berbeza diperlukan.
Pertimbangkan kod alternatif berikut:
i = 0 while i < len(some_list): print(some_list[i]) print(some_list.pop(0)) print(some_list.pop(0)) i += 1
Dalam kod ini, kami menggunakan gelung sementara untuk mengawal lelaran secara manual. Daripada lelaran melalui senarai secara langsung, kami menggunakan indeks i untuk mengakses elemen dan kemudian secara manual pop item daripada some_list. Ini memastikan gelung bertindak balas kepada kemas kini some_list.
Atas ialah kandungan terperinci Mengapa Mengubah Suai Senarai Semasa Lelaran Menyebabkan Keputusan Tidak Dijangka dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!